我试图在数据集中创建一个新列,根据预先存在的列的输入,为每一行提供一个输出。
在此输出列中,我希望“NA”if给定行中的任何输入值都是“0”。否则(如果没有一个输入为 0),我希望该行的输出是输入的唯一值的数量。
我认为解决方案将使用ifelse嵌套在一个函数中apply函数,但我收到一个我不明白的错误。
data$output <- apply(data, 1, function(x) {ifelse(x == 0, NA, length(unique(x)))})
错误于$<-.data.frame
(*tmp*
,“输出”,值 = c(3L, 3L, 3L, 3L, :
替换有 3 行,数据有 4 行
我不知道为什么替换有 3 行,因为我认为 apply 只是对我的 4 行中的每一行执行相同的功能。
您想要检查一行中是否有任何变量为 0,因此您需要使用any(x==0)
代替x == 0
in the ifelse
陈述:
apply(data, 1, function(x) {ifelse(any(x == 0), NA, length(unique(x)))})
# [1] 1 NA 2
基本上ifelse
如果第一个参数的长度为 n,则返回长度为 n 的向量。您想要每行一个值,但要传递多个值x==0
(您传递的值的数量等于数据框中的列数)。
Data:
(data <- data.frame(a=c(1, 2, 3), b=c(1, 0, 1)))
# a b
# 1 1 1
# 2 2 0
# 3 3 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)