Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按R中的列名返回值_R - Fatal编程技术网

按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

  • df[,“ID”,drop=FALSE]
    选择第一列(“ID”)并将其作为
    数据帧保存
  • df[cbind(1:nrow(df),df$ID2+1)]
    使用子集设置,根据列“ID2”+1获取行1:3和列,因为第一列未被计数
  • cbind
    ing结果返回一个新的
    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)