我试图使数据集中的新列为每一行提供单个输出,具体取决于来自现有列的输入。
在此输出列中,如果给定行中的任何输入值均为“0”,则我希望为“NA”。 否则为(如果所有输入都不为0),我希望该行的输出为输入的唯一值的数量。
我以为该解决方案将使用嵌套在中的,ifelse 函数和函数,但是出现了我不理解的错误。data$output <- apply(data, 1, function(x) {ifelse(x == 0, NA, length(unique(x)))})
我不知道为什么替换项有3行,因为我认为对4行中的每行都执行相同的功能。
最佳答案
您要检查一行中的任何变量是否为0,因此需要在any(x==0)
语句中使用x == 0
而不是ifelse
:
apply(data, 1, function(x) {ifelse(any(x == 0), NA, length(unique(x)))})
# [1] 1 NA 2
如果它的第一个参数的长度为n,则
ifelse
基本上返回长度为n的向量。您希望每行一个值,但是要用x==0
传递多个值(您传递的值的数量等于数据帧中的列数)。数据:
(data <- data.frame(a=c(1, 2, 3), b=c(1, 0, 1)))
# a b
# 1 1 1
# 2 2 0
# 3 3 1
关于r - 在应用中使用ifelse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30769325/