Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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,所以我有一个数据集,它有多个变量,我想用它们来创建一个新的变量。我见过其他类似这样的问题使用ifelse语句,但这将是非常不够的,因为新变量基于32个其他变量。变量用1、2、3或NA的值进行编码,如果32个变量中有2个或更多的值为1,则我希望新变量编码为1,否则为2。下面是一个我一直在尝试做的小例子 df <- data.frame(id = 1:10, v1 = c(1,2,2,2,3,NA,2,2,2,2), v2 = c(2,2,2,2,2,1,2,1,2,2),

所以我有一个数据集,它有多个变量,我想用它们来创建一个新的变量。我见过其他类似这样的问题使用ifelse语句,但这将是非常不够的,因为新变量基于32个其他变量。变量用1、2、3或NA的值进行编码,如果32个变量中有2个或更多的值为1,则我希望新变量编码为1,否则为2。下面是一个我一直在尝试做的小例子

df <- data.frame(id = 1:10, v1 = c(1,2,2,2,3,NA,2,2,2,2), v2 = c(2,2,2,2,2,1,2,1,2,2), 
             v3 = c(1,2,2,2,2,3,2,2,2,2), v4 = c(2,2,2,2,2,1,2,2,2,3))
我还尝试在if-else语句中使用行和,但对于缺少的值,这并不适用于所有观察,除非我将NAs重新编码为另一个我希望避免执行的值,而且我觉得有一种更有效的方法来执行此操作


我觉得这个问题很可能已经被回答过了,但我找不到任何答案。因此,如果您能提供帮助或指导以前的答案,我们将不胜感激

看起来您很快就可以获得所需的输出了,但在调用
rowSums()
时,可能缺少了
na.rm=TRUE
参数。这将在
rowSums
进行计算之前删除所有NAs

无论如何,使用上面的数据框,我创建了一个新变量,它计算1在变量中出现的次数,同时忽略NA值。请注意,我已将数据子集以排除
id
列:

df$count <- rowSums(df[-1] == 1, na.rm = TRUE)

更新/编辑:正如Gregor在评论中提到的那样,您也可以将
行和数
函数包装在
ifelse
语句中,用于一行代码。

如果您查看
?行和数
,您应该会发现您可以设置
na.rm=TRUE
以排除缺少的值。第5行似乎不正确。根本没有1,但它被分配了1。我想第5行和第6行被切换了
rowsumes(df[-1]==1,na.rm=TRUE)>=2
或者我认为是类似的。
ifelse(rowsumes(df[-1]==1,na.rm=TRUE)>=2,1,2)
似乎是正确的。我很想以打字错误结束?似乎OP只需要查看
?行和
就可以看到它有
na.rm
参数。对不起,第5行和第6行是一个混淆。我只是把它打出来,让大家知道我在看什么。我试图通过将所有变量的值相加来使用rowSums(因此rowSums这很有效。正如我在上面的评论中提到的,我没有意识到可以让rowSums计算条件的出现次数。谢谢。
df$count <- rowSums(df[-1] == 1, na.rm = TRUE)
df$var <- ifelse(df$count >= 2, 1, 2)
  id v1 v2 v3 v4 count var
1   1  1  2  1  2     2   1
2   2  2  2  2  2     0   2
3   3  2  2  2  2     0   2
4   4  2  2  2  2     0   2
5   5  3  2  2  2     0   2
6   6 NA  1  3  1     2   1
7   7  2  2  2  2     0   2
8   8  2  1  2  2     1   2
9   9  2  2  2  2     0   2
10 10  2  2  2  3     0   2