【问题标题】:If statement for dataframe数据框的 if 语句
【发布时间】:2016-02-13 13:27:19
【问题描述】:

我有以下示例数据:

A = data.frame( x=c('x','x','y','y','z','z'), j=c(1,1,1,2,2,3)   )
A$z[A$x=="x"]=1
A$z[A$x=="y"]=1
A$z[is.na(A$z)]=0

我想创建一个新列"Test",使用等于1的列"z"作为条件,并取列"x"的值。

我使用以下语句但有警告信息

if(A$z==1)A$Test=A$z

警告信息: 如果 (A$z == 1) A$Test = A$z : 条件的长度 > 1,并且只使用第一个元素

我该如何纠正这个问题?

【问题讨论】:

  • I am the following sample data - 很高兴认识你,A ;-)
  • A[“测试”]
  • 感谢@vaettchen,但列返回数字而不是列“x”的确切值
  • idx <- A$z == 1; A$Test[idx] <- as.character(A$x[idx])?
  • 这是因为您的列 x 是一个因素。对于示例数据,您可以使用A[ "Test" ] <- ifelse( A$z == 1, as.character( A$x ), 9 ) 解决此问题。对于您的真实数据,请与str( A ) 核对您拥有的数据类型。

标签: r if-statement


【解决方案1】:

我们也可以

A$Test <- NA^(A$z!=1)*A$z

【讨论】:

  • 我认为 R 开发人员团队选择了一个有趣的约定,将NA^0 定义为1。在我看来,它在数学上并不严谨(我宁愿期待NaN),但对于编程目的和“打代码”来说,它绝对是一个不错的功能。
  • @RHertel 这是一个很好的功能,否则我们必须在很多情况下使用ifelse
【解决方案2】:

创建test 变量作为数据框的一部分,并使用ifelse() 添加适当的值。考虑:

A$Test = ifelse(A$z==1, A$z, NA)

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2020-09-28
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多