r - 在 apply 内使用 ifelse

标签 r if-statement nested dataframe apply

我试图在我的数据集中创建一个新列,为每一行提供一个输出,具体取决于来自预先存在的列的输入。

在这个输出列中,我想要“NA”如果 给定行中的任何输入值都是“0”。 否则 (如果所有输入都不为 0),我希望该行的输出是输入的唯一值的数量。

我认为该解决方案将使用 ifelse 嵌套在 中的函数申请 函数,但我收到一个我不明白的错误。

data$output <- apply(data, 1, function(x) {ifelse(x == 0, NA, length(unique(x)))})

Error in $<-.data.frame(*tmp*, "output", value = c(3L, 3L, 3L, 3L, : replacement has 3 rows, data has 4



我不知道为什么替换有 3 行,因为我认为 apply 只是对我的 4 行中的每一行执行相同的功能。

最佳答案

您想检查一行中是否有任何变量为 0,因此您需要使用 any(x==0)而不是 x == 0ifelse陈述:

apply(data, 1, function(x) {ifelse(any(x == 0), NA, length(unique(x)))})
# [1]  1 NA  2

基本上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

关于r - 在 apply 内使用 ifelse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30769325/

相关文章:

css - 防止嵌套表上的重复边框(边框折叠不起作用)

r - 结合 "by"和 "on"加入并创建 data.table 的汇总列

r - 安装flowCore包R时出错

r - 无法使用 ggsurvplot 列表中的 survfit 对象绘制 kaplan-meier 曲线

sql-server - 单个 If 语句需要在代码块中开始和结束

php - 更好的方法来做到这一点?除了很多 if else 条件

java - 递归字符串解压

r - 当start大于stop时如何生成序列

excel - 数据透视表显示值,而不是值的总和

javascript - 从 json 检索嵌套数据时出现问题