我有一个数据框,其中每一列都有唯一的名称,但是几列的内容是相同的。内容相同的列都是因子变量,它们以相同的方式结尾(例如.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))
)
答案 0 :(得分:4)
如果它们确实是重复的列,则似乎没有必要合并它们,但是您只需删除它们即可:
dfUnique <- DF[!duplicated(as.list(DF))]
答案 1 :(得分:2)
您的数据框似乎是合并的结果。理想的解决方法是在上一步(合并)中进行处理。但是,另一个想法是删除列名中.
之前的所有内容,并简单地删除重复的列名,即
DF[!duplicated(gsub('.*\\.', '', names(DF)))]