我正在尝试将列名称字符串拆分为单独的列,但我面临的问题是行具有逻辑值。有一些帖子将列与行中的字符串分开,但我找不到任何带有逻辑值的帖子。
我的 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)
我收到错误:
Error in names(newdf) <- paste(rep(names(split.DF), each = 2), c(".a", : 'names' attribute [8] must be the same length as the vector [4]
最佳答案
这是一种使用replicate
和Map
的方法
as.data.frame(Map(x = strsplit(names(mydf), '[.]+'),
DATA = mydf,
f = function(x,DATA){
setNames(replicate(length(x), DATA, simplify = FALSE),x )}
))
## author Aa Ab BB Ca Cb
## 1 N1 TRUE TRUE TRUE FALSE FALSE
## 2 N2 TRUE TRUE FALSE FALSE FALSE
## 3 N3 FALSE FALSE TRUE TRUE TRUE
关于r - 将列名称中的字符拆分为新列,并在行中包含逻辑值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056024/