Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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,我是R和这个论坛的新手,所以为一个相当基本的问题道歉 我有一组列(即变量,因为它是一个数据帧),其中colname都以相同的名称开始,但以一个不同的数字结束,例如:variable_0、variable_1,等等,最多12个 对于这些列中的每一列,每一行都包含数字,同样从0到12 我感兴趣的是查找(每行)colname的尾随数与该特定变量的值相匹配的值: v_0 v_1 v_2 v_3 1 2 2 2 1 2 3 3 在这个例子中,我想要的是一个新变量x,它对于第1行等

我是R和这个论坛的新手,所以为一个相当基本的问题道歉

我有一组列(即变量,因为它是一个数据帧),其中colname都以相同的名称开始,但以一个不同的数字结束,例如:variable_0、variable_1,等等,最多12个

对于这些列中的每一列,每一行都包含数字,同样从0到12

我感兴趣的是查找(每行)colname的尾随数与该特定变量的值相匹配的值:

v_0 v_1 v_2 v_3
1   2   2   2
1   2   3   3
在这个例子中,我想要的是一个新变量x,它对于第1行等于2(因为v_I=I仅对于I=2),对于第2行等于3

理想情况下,代码还将包括一个解决方案,用于每行存在多个匹配项的情况:创建一个变量y,如果匹配项超过1,则为1,否则为零;将x设置为第一个匹配项

非常感谢您的帮助!谢谢大家!

试试这个:

trail = as.numeric(gsub(".*_([0-9]*)","\\1",names(df)))
df$x = apply(df, 1, function(u) if(all(trail!=u)) NA else trail[match(T,trail==u)])

#> df
#  v_0 v_1 v_2 v_3 x
#1   1   2   2   2 2
#2   1   2   3   3 3
如果你有一些糟糕的数据,比如:

df = data.frame(v_0=c(1,1,2), v_1=c(1,2,5), v_2=2:4, v_3=2:4)
#  v_0 v_1 v_2 v_3
#1   1   1   2   2
#2   1   2   3   3
#3   2   5   4   4

df$x = apply(df, 1, function(u) if(all(trail!=u)) NA else trail[match(T,trail==u)])
#  v_0 v_1 v_2 v_3  x
#1   1   1   2   2  1
#2   1   2   3   3  3
#3   2   5   4   4 NA

trail
包含每列的尾随数字(我假设键分隔符是
)。然后,对于每一行,我们检查哪个数字等于列中的跟踪号(我们使用
apply
循环,第二个参数
1
表示我们在行上循环-
2
用于列)。如果没有匹配项,则返回
NA
。如果有一个或多个,则取第一个数字。

使用@ColonelBeauvel数据的另一个选项是

trail <- as.numeric(sub('[^0-9]+', '', names(df)))
indx <- df==trail[col(df)]
df$x <- trail[max.col(indx, 'first')* NA^!rowSums(indx)]
df
#  v_0 v_1 v_2 v_3  x
#1   1   1   2   2  1
#2   1   2   3   3  3
#3   2   5   4   4 NA

trail不错,但您应该通过示例真正解释代码的每个部分都在做什么;)那真的很有帮助,谢谢。对于那些感兴趣的人,我对代码做了一些修改,因为我实际上只对一些变量子集感兴趣:
myvarlist不能再编辑我的评论,但请注意最后一点有一个错误,应该从
df$x开始。非常感谢,这真的很有帮助!