r - 将列名称中的字符拆分为新列,并在行中包含逻辑值

标签 r dataframe split r-colnames

我正在尝试将列名称字符串拆分为单独的列,但我面临的问题是行具有逻辑值。有一些帖子将列与行中的字符串分开,但我找不到任何带有逻辑值的帖子。

我的 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]

最佳答案

这是一种使用replicateMap的方法

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/

相关文章:

python - 如何在 python 中用数据框中的随机整数替换 0?

Python 正则表达式匹配段落

r - 提高 R 函数的效率和速度

r - 如何在调查包中的 svyttest 函数中使用 for 循环?

python - 如何在python中替换NaN值

python - 如何根据分类列对 pandas 数据框进行洗牌

javascript - 我正在尝试将文本拆分为段落,它是使用 javascript 以逗号而不是新行或段落进行拆分

Java 字符串拆分在 Windows 和 Linux 上给出不同的输出

R tableGrob 更改行的格式

r - 如何使用 R 和 XLConnect 保存 XLSX 电子表格而不在单元格中换行?