【问题标题】:Looping through the factors and compare two different rows and columns循环遍历因子并比较两个不同的行和列
【发布时间】:2021-12-17 22:03:29
【问题描述】:

我有一个类似的数据框。代码如下所示

data <- data.frame( 
    Details = c("PNR1", "PNR1", "PNR11", "PNR2", "PNR2"), 
    FromCity = c("MAA", "BLR", "DEL", "TRV", "HYD"), 
    ToCity = c("BLR", "MAA", "MAA", "HYD", "TRV")
)

输出应该与下面类似

     Details FromCity ToCity
1    PNR1      MAA    BLR
2    PNR1      BLR    MAA
3    PNR11     DEL    MAA
4    PNR2      TRV    HYD
5    PNR2      HYD    TRV

我要做的是根据以下条件创建另一列987654328@在新栏目中。

我的最终输出应该是这样的。

> dput(data)
structure(list(Details = c("PNR1", "PNR1", "PNR1", "PNR2", "PNR2"
), FromCity = c("MAA", "BLR", "DEL", "TRV", "HYD"), ToCity = c("BLR", 
"MAA", "MAA", "HYD", "TRV")), class = "data.frame", row.names = c(NA, 
-5L))

请帮助编写此代码。您可以将每个 PNR 视为不同的分类变量,这就是我在每个因素上运行循环的想法。

【问题讨论】:

  • 预期输出的最后一行在技术上是否等于 NA,因为我们没有下一行来确定 Type 列的状态?
  • 此外,您提供的示例数据并没有达到您的预期结果。 ToCity 应该等于:ToCity = c("BLR", "MAA", "MAA", "HYD", "TRV") 以匹配您的预期输出
  • 基本上 PNR2 是一个 ID 的,他有来回的旅程。所以,我想知道ID是返回类型还是单向类型。
  • 哦,所以它需要是一个按组,组是细节。好的。好吧,我提供的答案是错误的,哈哈。

标签: r loops


【解决方案1】:

你可以试试这个。

require(tidyverse)

data %>% 
  group_by(Details) %>% 
  mutate(ToCityLag = lead(ToCity))

lead 函数返回选定列的下一个值。有了这些信息,您可以使用 if_else 创建列。

【讨论】:

  • 给我一些列值作为 NA
  • 在这种情况下,您想用“O”填充新列
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多