2

次のようなキーと値のペアのリストがあるとしましょう。

l <- list("A" = 10, "B" = 20, "C" = 30)

そして、値のベクトルと対応する型のベクトルを持つデータ フレーム:

df <- data.frame (type=c("A","A","B","B","B","C"),value=c(1,2,3,4,5,6))
df
  type value
1    A     1
2    A     2
3    B     3
4    B     4
5    B     5
6    C     6

リスト内の型の値に基づいてこれらの値を分割し、最終的に次のようなデータ フレームになるようにしたいと思います。

df
  type value newval
1    A     1   0.10
2    A     2   0.20
3    B     3   0.15
4    B     4   0.20
5    B     5   0.25
6    C     6   0.20

これは簡単だと思いますが、グーグルは私を失敗させました。私がはるかに精通しているPythonでは、行を反復処理してリストに辞書を使用することができましたが、それを行う方法も明らかではなく、Rでも適切に見えません.

4

1 に答える 1

2

結合または合併の条件について考えれば、それは単純明快になります。

あなたの例のように、値は文字ではなく数値であると推測することに注意してください。

そのパッケージを使用してdata.tableこれを行う方法を示します

library(data.table)
# df with value as numeric
df <- data.frame (type=c("A","A","B","B","B","C"),value=1:6)
# create the data.table
DT <- data.table(df, key = 'type')
#  create the key-value list as a data.table (specifying the levels the same 
# as in DT[,type]
byl <- data.table(type = factor(names(l), levels = levels(DT[,type])), value = unlist(l), key = 'type')
# note they are both keyed by type, so we can join by type and then
# create a column that is value/ (value in the i component)
# so we use value / i.value
# i.value references value from the i argument (byl in this case)
DT[byl, newval := value / i.value ]
# look in DT now
DT
   type value newval
1:    A     1   0.10
2:    A     2   0.20
3:    B     3   0.15
4:    B     4   0.20
5:    B     5   0.25
6:    C     6   0.20
于 2012-11-29T03:40:12.197 に答える