当前位置: 首页 > 知识库问答 >
问题:

组合R中的列系列

唐炜
2023-03-14
V1    V2    V3    V4    V5    V6
A     B     C     D     E     F
first second third
AD    BE     CF

为此,我尝试使用lapply和一个自定义函数:

col_unite <- c(c('V1', 'V4', 'first'), c('V2', 'V5', 'second'), c('V3', 'V6', 'third'))
#function that combines columns and gives a new name
unite_cols <- function(dataframe, col_list){
  dataframe[[col_list[3]]] <- paste0(dataframe[[col_list[1]]], ', ', 
  dataframe[[col_list[2]]])
  dataframe
}

new_df <- lapply(col_unite, function(x){
   df <- unite_cols(orig_df, x)
   # df[x[3]] <- paste0(test[x[1]], ', ', test[x[2]]) # a different attempt
   return(df)
})

我知道我可以用一堆联合声明来做到这一点,或者也许有一种方法可以用循环和联合来做到这一点。但是考虑到需要遍历的列数,我想尝试用一种更优雅的方式来完成它。

共有1个答案

慎芷阳
2023-03-14

像这样的怎么样

n <- 4
rbind.data.frame(apply(matrix(df, nrow = n - 1), 1, paste0, collapse = ""))
#   X.AD. X.BE. X.CF.
#1    AD    BE    CF

在这里,我们通过将data.frame转换为n-1行、paste0ing行的n=4个条目来组合每个n=4个条目,并将生成的矩阵转换回data.frame条目。

唯一剩下的就是想出合适的列名。

df <- read.table(text =
    "V1    V2    V3    V4    V5    V6
A     B     C     D     E     F", header = T, colClasses = "character")
 类似资料:
  • 我有一些数据,其中每个id由不同的类型测量,这些类型可以有不同的值。测量值为val。一个小的虚拟数据如下所示: 那么df是: 我需要传播/投射数据,以便每个id的

  • 输入的dput() 结构(列表(Varname=structure(1:6,.标签=c(“A”,“B”,“c”,“D”,“E”,“F”),类=“因子”),成分=结构(c(3L,1L,1L,4L,2L,1L),标签=c(“”,“A,c”,“B”,“c”),类=“因子”),名字=结构(c(5L,3L,2L,4L,6L),标签=c(“”,“鲍勃”,“凯茜”,“迪克,南希”,“杰克,布鲁斯”,“曼迪”),

  • 本文向大家介绍如何在R中合并列表?,包括了如何在R中合并列表?的使用技巧和注意事项,需要的朋友参考一下 当我们有多个列表但它们具有相似的数据类型时,我们可能想要合并或合并这些列表。这将有助于使用,因为我们可以使用一个列表名称执行计算,而不是将其应用于多个列表名称。我们可以借助mapply函数组合多个列表。 示例 请看以下列表- 现在假设,我们还有一个列表,即List3,然后可以按照如下所示的相同方

  • 我有一个不同长度的数据帧列表(df),按年份索引,数据的代理如下所示:

  • 我有一个序列,其中我期望每个过程值与前一个相同或1。 我想要什么: 我用以下代码解决了这个问题: 然而,这看起来相当“肮脏”和低效。有没有计算上耗时更少的解决方案?