按R中的列名返回值
我有以下格式的数据集按R中的列名返回值,r,R,我有以下格式的数据集 ID 01 02 03 04 05 ID2 1 1 NA NA NA NA 01 2 NA 2 NA 3 NA 04 3 NA NA 3 NA 1 05 现在我想通过ID2返回每行中的值 例如,在第1行中,我希望根据ID2列中的条目返回值1、第2行的值3等等 ID Value 1 1 2 3 3 1 提前感谢您可以使用: cbind(df[, "ID", drop = FALSE], Value = df[cbind(1:nrow(df),
ID 01 02 03 04 05 ID2
1 1 NA NA NA NA 01
2 NA 2 NA 3 NA 04
3 NA NA 3 NA 1 05
现在我想通过ID2返回每行中的值
例如,在第1行中,我希望根据ID2列中的条目返回值1、第2行的值3等等
ID Value
1 1
2 3
3 1
提前感谢您可以使用:
cbind(df[, "ID", drop = FALSE], Value = df[cbind(1:nrow(df), df$ID2+1)])
# ID Value
#1 1 1
#2 2 3
#3 3 1
选择第一列(“ID”)并将其作为df[,“ID”,drop=FALSE]
数据帧保存
使用子集设置,根据列“ID2”+1获取行1:3和列,因为第一列未被计数df[cbind(1:nrow(df),df$ID2+1)]
ing结果返回一个新的cbind
data.frame
评论后编辑: 如果您有如下修改的示例数据集,其中列
ID2
为factor
,列03
缺失:
df <- read.table(header=T, check.names = F, text = "
ID 01 02 03 04 05 ID2
1 1 NA NA NA NA 01
2 NA 2 NA 3 NA 04
3 NA NA 3 NA 1 05", colClasses = c(rep("integer", 6), "factor")) # read data
df$`03`<- NULL # remove column 03
尝试
数据:
df你的解决方案比我的好!我喜欢drop=F
,非常有趣!我有一个不同维度的问题想象你的列名是不连续的,即ID,01,02,04,05,ID2,其中03缺失上述解决方案将抛出下标越界错误。你能尝试一下这个场景来找到一个解决方案吗?@Gughan,如果我删除列“03”,然后使用我建议的解决方案,我不会出错,因为它会根据列的位置选择列。你的意思是你想把“ID2”中的值作为列名而不是列索引吗?@Gughan,看我的更新答案,这就是你要找的吗?ID2列是数字/整数还是其他什么,即因子还是字符?它是一个因子,但我已将它改为数字
cbind(df[, "ID", drop = FALSE], Value = df[cbind(1:nrow(df), match(df$ID2, names(df)))])
# ID Value
#1 1 1
#2 2 3
#3 3 1
data.frame(ID=df$ID,Value=(sapply(1:nrow(df), function(x) df[x,df$ID2[x]+1])))
ID Value
1 1 1
2 2 3
3 3 1
df<-read.table(text="ID 01 02 03 04 05 ID2
1 1 NA NA NA NA 01
2 NA 2 NA 3 NA 04
3 NA NA 3 NA 1 05",head=T)