【问题标题】:How to build a new column using for loop and if statement based on the values already present如何根据已经存在的值使用 for 循环和 if 语句构建新列
【发布时间】:2021-02-06 12:01:08
【问题描述】:

我有一个数据集,我想在其中创建一个新列并根据每行中存在的值添加值。下面是例子

新栏目销售结果 100 低 200 低 300 中等 400 高 500高

下面是我试图得到结果的代码

data$New_Column = for (Sal in data$Sales){
  if(Sal > 300){
  print("High")
} else if(Sal == 300){
  print("Moderate")
}else{
  print("Low")
}
  
}

谢谢

【问题讨论】:

  • 接受已回答您的 OP 的答案被认为是礼貌的。这有助于其他正在寻找相同/相似查询解决方案的人。此外,人们可能愿意在您未来的查询中为您提供帮助。

标签: r


【解决方案1】:

也许尝试使用 mutate 而不是循环:

newdat <- data %>>% mutate(New_Column, if(Sal==300 = "moderate"), ifelse(Sal>300, "High", "Low")

【讨论】:

  • 请注意 if 不是矢量化的,而 ifelse 是。因此你会打电话给ifelse(Sal == 300, "moderate", ifelse(Sal > 300, "High", "Low"))Sal==300 = "moderate" 也会抛出错误!
  • 亲爱的 Jamie,感谢您恢复,我试过了,但上述解决方案没有生成所需的输出。
  • 大卫抓得好!看来他明白了。
【解决方案2】:

您通常不会在 R 中的循环中执行此操作,因为大多数相关函数都可以直接使用向量。

这是一个使用 data.table::fcase() 的选项,另一个使用来自 base R 的 ifelse()

library(data.table)

data$New_Column  <- fcase(
  data$Sales > 300, "High",
  data$Sales == 300, "Moderate",
  data$Sales < 300, "Low"
)

# Using base R only:
data$New_Column  <-
  ifelse(data$Sales == 300, "Moderate", ifelse(data$Sales > 300, "High", "Low"))

#   Sales New_Column
# 1   300   Moderate
# 2   500       High
# 3   200        Low
# 4   500       High
# 5   400       High
# 6   500       High
# 7   400       High
# 8   300   Moderate

输入数据示例

set.seed(13L)
data <- data.frame(
  Sales = sample(seq(100, 500, 100), size = 8L, replace = TRUE)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多