Jor*_*ner 7 if-statement nested r apply dataframe
我试图在我的数据集中创建一个新列,为每一行提供单个输出,具体取决于预先存在的列的输入.
在此输出列中,如果给定行中的任何输入值为"0" ,则我希望"NA ".否则(如果没有输入为0),我希望该行的输出是输入的唯一值的数量.
我认为解决方案将使用嵌套在apply函数中的ifelse函数,但是我得到一个我不理解的错误.
data$output <- apply(data, 1, function(x) {ifelse(x == 0, NA, length(unique(x)))})
Run Code Online (Sandbox Code Playgroud)
错误
$<-.data.frame(*tmp*,"输出",值= c(3L,3L,3L,3L,:替换有3行,数据有4行)
我不知道为什么替换有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
Run Code Online (Sandbox Code Playgroud)
ifelse如果第一个参数的长度为n,则基本上返回长度为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
Run Code Online (Sandbox Code Playgroud)