我一直在努力解决这个问题,并确定一定有一种有效的方法可以在R中做到这一点,而无需编写for循环。任何建议,不胜感激!
我想在数据框中创建一个新列,其中包含该数据框中现有列的值,但是要动态指定其值被选择的列。一个例子将有助于阐明:
> mydata <- head(mtcars)
> mydata
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> myquery <- c("cyl","cyl","gear","gear","carb", "carb")
在这一点上,我想知道是否有一个简单的R函数,它将myquery
为的每一行选择column的值,mydata
换句话说:
f(mydata, myquery)
6 6 4 3 2 1
如果有人知道一种简单高效的书写方式f
,请在此先感谢您,在此感谢您的宝贵时间。
您可以data.frame
使用矩阵索引a以实现该行为
dd<-head(mtcars)
myquery <- c("cyl","cyl","gear","gear","carb", "carb")
dd[cbind(seq_along(myquery), match(myquery, names(dd)))]
# [1] 6 6 4 3 2 1
矩阵的第一列是行,使用这种方法有括号没有逗号,当你做一个正常的喜欢当第二个是列(和记[,]
子集。在这里,我转换的myqeury值来使用他们的数字列索引match
等等矩阵的两列都是相同的类型(如果必须),如果使用行名来对行进行索引,则还可以使用字符矩阵。
dd[cbind(rownames(dd), myquery)]
# [1] 6 6 4 3 2 1
也可以。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句