我是R的新手,正在整理数据集。我有大量的列,其中一些列(在.CSV文件中)包含几个以逗号分隔的名称。例如,我需要拆分和复制列,并为每列分别指定逗号分隔名称:
然而,我可能有更复杂的情况,其中有多个列(具有不同的数值)具有相同的重复多个名称。这些列应该拆分(每个名称的每一列),并且重复的名称应该加上后缀('。''或者甚至'。''如果重复多次),请看这里:
我正在积极探索如何做到这一点,但仍然没有运气。任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
这是一种方式:
首先,让我们使用data.table::fread
library(data.table)
dt = fread(
"a b c,d e f,g,h
1 2 3 4 5
1 2 3 4 5", sep=' ')
# a b c,d e f,g,h
#1: 1 2 3 4 5
#2: 1 2 3 4 5
cols = names(dt)
现在我们使用stringr
来计算名称中逗号的出现次数,并相应地添加列。我们在matrix
语句中使用回收来填充具有相同值的新相邻列
library(stringr)
dt.new = dt[, lapply(cols, function(x) matrix(get(x), NROW(dt), str_count(x, ',')+1L))]
names(dt.new) <- unlist(strsplit(cols, ','))
dt.new
# a b c d e f g h
# 1: 1 2 3 3 4 5 5 5
# 2: 1 2 3 3 4 5 5 5
同样,如果您更喜欢使用基础data.frame
而不是data.table
,我们可以改为
dt.new = data.frame(lapply(cols, function(x) matrix(dt[[x]], NROW(dt), str_count(x,',')+1L)))
names(dt.new) <- unlist(strsplit(cols, ','))