r - 根据变量向数据集添加行
问题描述
我有一个数据集,其中包含一个值“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 做这件事吗?
谢谢!
解决方案
感谢您尝试更清晰并尝试添加一个最小的可重现示例!这有助于我理解你的问题!可能有很多方法可以做你想做的事,这是使用循环的一种解决方案:
按照您的问题创建一个示例数据集:
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
现在应该是正确的形式。
推荐阅读
- python - 如何在 NetworkX 中找到所有节点的祖先?
- django - Django - 在模板循环中获取所有相关信息
- reactjs - 由于反应组件内的错误“TS2339:类型'Y'上不存在属性'X'”而无法设置参考
- java - 为什么我的 for 循环不在输出中使用?
- python - 如何使用美丽的汤从网站下载图像?
- go - 在 Go 操场上没有得到预期的结果
- typeorm - TypeORM - 将 take/limit 与 leftJoinAndSelect 一起使用未按预期工作
- python - web2py:检测下拉小部件的变化
- mysql - 无法在 sysdatabases 中找到数据库的条目
- java - Groovy 中的日期格式匹配