在单个数据框中连接重复的列

时间:2019-05-20 13:48:30

标签: r

我有一个数据框,其中每一列都有唯一的名称,但是几列的内容是相同的。内容相同的列都是因子变量,它们以相同的方式结尾(例如.x或.y)。我的目标是将所有具有相同结尾(.x或.y)的列合并为一个列。

我在这方面遇到的大多数解决方案都将多个数据框组合在一起,但是我还没有找到在单个数据框内完成此操作的解决方案。我提供了一些示例脚本来说明当前数据框的外观以及所需的输出。

# generate some data
dv1 = rnorm(6)
dv2 = rnorm(6)
dv3 = rnorm(6)

# current dataframe
DF <- data.frame(dv1, 
                 iv1.x = sort(rep(letters[1:2], 3)), 
                 iv1.y = as.factor(c(1:6)),
                 dv2, 
                 iv2.x = sort(rep(letters[1:2], 3)), 
                 iv2.y = as.factor(c(1:6)),
                 dv3, 
                 iv3.x = sort(rep(letters[1:2], 3)), 
                 iv3.y = as.factor(c(1:6))
                 )

# desired dataframe 
DF.cbmd <- data.frame(dv1,
                 dv2, 
                 dv3,
                 iv1.x = sort(rep(letters[1:2], 3)), 
                 iv1.y = as.factor(c(1:6))
                 )

2 个答案:

答案 0 :(得分:4)

如果它们确实是重复的列,则似乎没有必要合并它们,但是您只需删除它们即可:

dfUnique <- DF[!duplicated(as.list(DF))]

答案 1 :(得分:2)

您的数据框似乎是合并的结果。理想的解决方法是在上一步(合并)中进行处理。但是,另一个想法是删除列名中.之前的所有内容,并简单地删除重复的列名,即

DF[!duplicated(gsub('.*\\.', '', names(DF)))]