首页 > 解决方案 > 根据变量向数据集添加行

问题描述

我有一个数据集,其中包含一个值“DoW”(星期几),格式如下:1__45_7(始终为 7 个字符)。我想为每个 DoW 数量复制我的数据集的行。例如,对于这个数据集:

可乐; 科尔B;陶氏;
标准杆;BKK; 1_3_5__
纽约市;伦敦; 1_____7

如果我在“DoW”变量中有“1_3_5__”,那么这个变量中有 3 个数字,我应该将它复制 2 次以使该行 3 次。在该行的每个重复中,我想要初始 DoW 值的数字之一。所以输出应该是:

可乐; 科尔B;陶氏;
标准杆;BKK; 1个;
标准杆;BKK; 3;
标准杆;BKK; 5个;
纽约;伦敦; 1个;
纽约;伦敦; 7;

我尝试了很多解决方案,但都没有成功。你有一个干净的方法来用 R 做这件事吗?

谢谢!

标签: r

解决方案


感谢您尝试更清晰并尝试添加一个最小的可重现示例!这有助于我理解你的问题!可能有很多方法可以做你想做的事,这是使用循环的一种解决方案:

按照您的问题创建一个示例数据集:

df <- data.frame(ColA=c("PAR", "NYC", "EEE"),
                 ColB=c("BKK", "LON", "ZRH"),
                 DoW = c("1_3_5__", "1_____7", "__"),
                 stringsAsFactors = FALSE)

创建一个空的 data.frame 以接收结果

resulting_df <- data.frame(ColA = character(),
                           ColB = character(),
                           Number = numeric(),
                           stringsAsFactors = FALSE)

现在,使用从“DoW”列中获取数字strsplit

numbers_list <- sapply(df$DoW, strsplit, "_")

df最后遍历numbers_list 中相应条目中的每一行和每个数字(使用 [[1]] 获取实际内容!)

for (i in 1:nrow(df)) {
  for (number in numbers_list[i][[1]]) {
    if (!number %in% c("")) {
      new_line <- data.frame(ColA = df$ColA[i], ColB = df$ColB[i], Number = number, stringsAsFactors = FALSE)
      resulting_df <- rbind(resulting_df, new_line)
    }
  }
}

该对象resulting_df现在应该是正确的形式。


推荐阅读