我试图将列名字符串拆分为单独的列,但我面临的问题是行具有逻辑值。有几篇文章将行中的字符串拆分为列,但我找不到任何具有逻辑值的文章。
我的data.frame看起来像这样:
mydf <- data.frame (author = c("N1", "N2", "N3"),
Aa..Ab = c(T, T, F),
BB = c(T, F, T),
Ca...Cb = c(F, F, T))
结果应该如下所示
mydfnew <- data.frame (author = c("N1", "N2", "N3"),
Aa = c(T, T, F),
Ab = c(T, T, F),
BB = c(T, F, T),
Ca = c(F, F, T),
Cb = c(F, F, T))
我尝试调整拆分列和名称的代码(Split character in column and name),如下所示:
splitCol <- function(dataframe, splitVars=names(dataframe)){
split.DF <- dataframe[,splitVars]
keep.DF <- dataframe[, !names(dataframe) %in% c(splitVars)]
X <- function(x)matrix(unlist(rep(x)), byrow=TRUE)
newdf <- as.data.frame(do.call(cbind, suppressWarnings(lapply(split.DF, X))) )
names(newdf) <- paste(rep(names(split.DF), each=2), c(".a", ".b"), sep="")
data.frame(keep.DF,newdf)
}
打电话时
splitCol(mydf)
我得到错误:
错误在names(newdf)〈- paste(rep(names(split.DF),each = 2),c(“.a”,:'names'属性[8]必须与vector [4]的长度相同
3条答案
按热度按时间gk7wooem1#
下面是使用
replicate
和Map
的方法z9gpfhce2#
一个答案,本质上是@mnel版本的两步变化:
结果:
ua4mk5z43#
这里有一个使用“reshape 2”包和我的“splitstackshape”包的替代方案。基本思想是获得一个“长”数据集,它比宽数据集更容易操作-即使最终目标是创建一个宽数据集:)