【问题标题】:Copy N/A to another column and convert other rows to numeric in R将 N/A 复制到另一列并将其他行转换为 R 中的数字
【发布时间】:2017-02-28 22:24:11
【问题描述】:

我有一个带有一行字符串的数据框,如下所示:

     colA
1    Apples
2    Bats
3    Cats
4    N/A
5    Dogs and Pigs
6    N/A

我想将每个“N/A”项复制到新列中的同一行,作为 NA,colB。我希望不是 NA 的所有其他行都是数字 0 或 1。

我已经尝试了以下代码以及很多其他的东西:

df$colB = regmatches(df$colA, gregexpr("N/A", df$colA, perl=TRUE))

谢谢。

【问题讨论】:

  • (1) 不能在向量中混合变量类型。如果 colB 包含“N/A”作为字符串,那么其他值(0 或 1)也将是字符串。 (2) 不清楚“数字 0 或 1”是什么意思。是什么决定它是0还是1?或者你的意思是全0还是全1? (3) d.b 注释中的代码没有给出预期的结果。
  • 抱歉,我的意思是我想要 NA 和 0 或 NA 和 1。我在提问时并不是要混合变量类型。谢谢。

标签: r regex text


【解决方案1】:

如果您希望 NA 表示“N/A”,而 0 表示其他所有内容,您可以使用ifelse

df$colB <- ifelse(df$colA == "N/A", NA, 0)

【讨论】:

  • 这很好用。我非常接近于遍历所有行,但这工作得更快。谢谢!
  • 很高兴听到。请记住ifelse“返回一个与测试形状相同的值。”在这种情况下,我们比较一个向量(列)并返回一个向量,所以它可以工作,但是这方面会引起混淆。
【解决方案2】:

match() 怎么样,还有一点小技巧。

df$colB <- NA ^ match(df$colA, "N/A", 0L)

给了

           colA colB
1        Apples    1
2          Bats    1
3          Cats    1
4           N/A   NA
5 Dogs and Pigs    1
6           N/A   NA

原始数据:

df <- structure(list(colA = structure(c(1L, 2L, 3L, 5L, 4L, 5L), .Label = c("Apples", 
"Bats", "Cats", "Dogs and Pigs", "N/A"), class = "factor")), .Names = "colA", row.names = c("1", 
"2", "3", "4", "5", "6"), class = "data.frame")

【讨论】:

  • 我也喜欢这个解决方案。谢谢!
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多