【问题标题】:How do you create a new column inside a list of data frames according to values inside each specific data frame?如何根据每个特定数据框内的值在数据框列表中创建一个新列?
【发布时间】:2016-08-11 02:12:02
【问题描述】:

我有一大组数据,我有一个基于站点名称的数据框列表,我希望创建一个新列,其中包含基于行结帐名称和返回名称的数值。数据示例如下所示:

fz$'66th & Center'
Bike CheckoutKioskName ReturnKioskName
24583  191     66th & Center   66th & Center
24584  191     66th & Center   66th & Center
24585  191     66th & Center   66th & Center
24586  191     66th & Center   66th & Center
24587  191     66th & Center   66th & Center
24588  191     66th & Center   66th & Center
24589   11     66th & Center   66th & Center
24590   11     66th & Center   66th & Center
24591   11     66th & Center   66th & Center
24592   11     66th & Center   66th & Center'

我想根据 CheckoutKioskName 是否与 ReturnKioskName 相同来创建一个名为“count”的新列,如果 CheckoutKioskName 与列表值名称不同('66th & Center ' 在这种情况下)那么计数值应该是 -1,最后一个选项是如果 ReturnKioskName 与列表值名称不同,那么计数值应该是 1。我的尝试在下面的 if其他语句。当列是因子或列是字符时,我在使用它时不断出错。

if(test$CheckoutKioskName == test$ReturnKioskName){
  test$count <- 0
}else{
  if(test$ReturnKioskName != t){
    test$count <- -1
  }else{
    if(test$CheckoutKioskName != t){
      test$count <- 1
    }
  }
}

我想有一种方法可以使用 lapply 来完成这个任务,但是每当我在这里使用它时,我都会继续失败。

感谢我能得到的任何帮助。

【问题讨论】:

    标签: r list if-statement dataframe


    【解决方案1】:

    我们可以使用lapply

    lapply(names(fz), function(nm) {fz1 <- fz[[nm]]
        transform(fz1, Count = ifelse(CheckoutKioskName == ReturnKioskName, 0,
                    ifelse(CheckoutKioskName ! = rep(nm, nrow(fz1)), -1, 1)))})
    

    【讨论】:

    • 我无法让它工作。它给了我一个处理每个数据帧长度的错误。
    • @Brett 代码中有错字,test$ReturnKioskName。现在已经修复了。
    【解决方案2】:

    尝试使用 which 语句并将您的标志存储在新列中。我建议将测试的列转换为字符,但如果这会有所不同,我就无法尝试,因为我没有时间重新创建您的数据;)

    test$count[which(test$CheckoutKioskName == test$ReturnKioskName)] <- 0
    

    ...等等。应该做的伎俩。

    【讨论】:

    • 哪些语句适用于我原始列表中的小型单个数据框。我最终使用: test$count[which(test$CheckoutKioskName == test$ReturnKioskName)]
    • 遍历列表。对于小型数据集应该很快。如果你在处理大数据,akrun 的建议可能更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多