我有一个数据加上包含列名称的列中的某些列的数据帧:
mydf <- data.frame(
"aa" = 11:15,
"ab" = 21:25,
"ac" = 31:35,
"nn" = c("aa", "aa", "ac", "ab", "aa"))
我想摆脱列“AA”的载体,“AB”,或者“交流”。每一行,列名,在“NN”列中指定。
所以,我应该得到11, 12, 33, 24, 15
。
可以这样没有循环呢? mydf[mydf$nn]
不起作用。
我们可以用match
返回列名的索引,然后创建一个行/列索引来提取值
mydf[-4][cbind(seq_len(nrow(mydf)), match(mydf$nn, names(mydf)))]
#[1] 11 12 33 24 15
我们可以使用cbind
并创建行列索引,然后用它来子集的数据帧。
mydf[cbind(1:nrow(mydf), mydf$nn)]
#[1] "11" "12" "33" "24" "15"
或者,如果你知道他们将要数始终
as.numeric(mydf[cbind(1:nrow(mydf), mydf$nn)])
#[1] 11 12 33 24 15
哪里
cbind(1:nrow(mydf), mydf$nn) #gives
# [,1] [,2]
#[1,] 1 1
#[2,] 2 1
#[3,] 3 3
#[4,] 4 2
#[5,] 5 1