0

私は R の (非常に) 新しいユーザーであり、ここで MATLAB コードを複製しようとしています (この段階では、Octave よりも R を好みます)。

私は次のマトリックスを持っていますdf:

variable value
th   100
tw   100
gap  30

最初の列に基づいて、2 番目の列の値に変数を割り当てられるようにしたいと考えています。だから基本的th = 100tw = 100、、、gap = 30

私の最終的な目的は、次の方法でデータを操作できるようにすることです。

difference <- th-gap

編集:

>dput(df)
structure(list(s = structure(1:3, .Label = c("aa", "bb", "cc" ), class = "factor"),
n = c(2, 3, 5)), .Names = c("s", "n"), row.names = c(NA, -3L), class = "data.frame")
4

2 に答える 2

0

ほとんどの場合、 adata.frameとは完全に異なるオブジェクトである a がありますmatrix。Amatrixは、それを にラップする次元属性を持つアトミック ベクトルmatrixです。これは実際には単なるアトミック ベクトルであるため、行列には​​ 1 つのタイプのデータしか含めることができないため、characterデータとデータを混在させることはできませんnumeric。一方、 Adata.frameはリストのタイプで、各リスト要素は同じ長さの原子ベクトルです (長さは行数を示し、リスト内の要素数は列数です)。各list要素は、異なる型のデータを保持できます。

だから、あなたが持っていると仮定しましょうdata.frame...

#  Construct the data
df <- read.table( text = "variable value
th   100
tw   100
gap  30" , h = TRUE )

df
#  variable value
#1       th   100
#2       tw   100
#3      gap    30

#  Subset the data.frame to the values you want using the `[` operator
difference <- df[ df$variable == 'th' , 'value' ] - df[ df$variable == 'gap' , 'value' ]
#[1] 70

演算子data.frameを使用してa をサブセット化できます。[内部の最初の引数[,]は行を参照し、2 番目の引数は列を参照します。したがって[ df$variable == 'th' , 'value' ] 、rows 引数で論理ベクトルを返します。これはTRUEwhenvariable == 'th'であり、 という列のこの条件を満たすすべての行を返しますvalue

于 2013-08-28T13:25:34.217 に答える
0

使用する

Vectorize(assign, c("x", "value"))(as.character(M[,1]), M[,2], envir=globalenv())

マトリックスまたはデータフレームはどこMですか。as.character割り当ての前に、因子が文字列に変換されていることを確認してください。

Mが 2 列目に数値を含む文字行列である場合、as.numeric(M[,2])代わりに を使用できますM[,2]

しかし、正直なところ、これは最善のアプローチではありません。Usingassignは直感的ではなく、コードが読みにくくなるため、通常は嫌われます。

リストを作成できます:

L <- as.list(M[,2])
names(L) <- M[,1]

のように名前でデータにアクセスしますL[["th"]]

于 2013-08-28T13:18:00.837 に答える