如何从dataframe中提取csv列并将其与现有dataframe组合

如何从dataframe中提取csv列并将其与现有dataframe组合,r,csv,read.table,read.csv,R,Csv,Read.table,Read.csv,我有一个数据框架,其中包含来自广泛格式问卷的数据。但有一列包含压缩实验数据,其中包含长格式的csv格式数据(作为字符串)。所以我想逆转这种压缩,恢复一个完整的表格数据集。应重复宽格式中的值以填充添加的行 这就是我的数据框架: df_wide <- data.frame(v1 = c("1", "2", "3"), v2 = c("sender, correct, \n1, y, \n2, y,",

我有一个数据框架,其中包含来自广泛格式问卷的数据。但有一列包含压缩实验数据,其中包含长格式的csv格式数据(作为字符串)。所以我想逆转这种压缩,恢复一个完整的表格数据集。应重复宽格式中的值以填充添加的行

这就是我的数据框架:

    df_wide <- data.frame(v1 = c("1", "2", "3"), 
                  v2 = c("sender, correct, \n1, y, \n2, y,", 
                      "sender, correct, \n2, n, \n1, n,", 
                      "sender, correct, \n1, n, \n2, y,"))
    colnames(df_wide) <- c("ID", "csvcolumn")
    df_wide$csvcolumn <- as.character(df_wide$csvcolumn)

> df_wide
>  ID                        csvcolumn
>1  1 sender, correct, \n1, y, \n2, y,
>2  2 sender, correct, \n2, n, \n1, n,
>3  3 sender, correct, \n1, n, \n2, y,
我能够读取csv列,并使用


df2我会质疑这里使用的输入。可能在Excel中优化为对R更有意义的输入。但并非总是可能

要清除此项,请首先按照
csv列
删除不需要的标题,并按
\n
字符进行拆分(需要
tidyverse
!)

然后,您可以调用
rbind
获取您的调查问卷数据,然后
ID
除以总行数除以
ID

qdat <- do.call(rbind,df_list[2:length(df_list)]) %>% 
        dplyr::select(1,2) %>% 
        as_tibble() 
df_long <- qdat %>%
           dplyr::mutate(ID = rep(unlist(df_list[[1]]), 
                                  dim(qdat)[1]/dim(df_list[[1]])[1])) %>%
           dplyr::select(ID, sender="X1", correct = "X2")

df_long
# A tibble: 6 x 3
     ID sender correct
  <dbl>  <dbl> <chr>
1     1      1 y
2     2      2 n
3     3      1 n
4     1      2 y
5     2      1 n
6     3      2 y
qdat%
dplyr::选择(1,2)%>%
作为_tible()
df_long%
dplyr::mutate(ID=rep(unlist(df_list[[1]]),
dim(qdat)[1]/dim(df_列表[[1]])[1]))%>%
dplyr::选择(ID,sender=“X1”,correct=“X2”)
德福朗
#一个tibble:6x3
ID发送者是否正确
1年
2 n
31N
412Y
521N
6 3 2 y
library(tidyverse)    
df_n <- df_wide %>% dplyr::mutate(n = gsub("sender, correct, \n", 
                                    "", 
                                    csvcolumn)) %>% 
                    dplyr::select(1,3) %>%
                    tidyr::separate(data=., 
                                    col="n", 
                                    sep="\n",
                                    into=c("s1","c1"))
df_list <- lapply(df_n, function(f){
                          read_csv(as.vector(f), col_names=F)
                        })
qdat <- do.call(rbind,df_list[2:length(df_list)]) %>% 
        dplyr::select(1,2) %>% 
        as_tibble() 
df_long <- qdat %>%
           dplyr::mutate(ID = rep(unlist(df_list[[1]]), 
                                  dim(qdat)[1]/dim(df_list[[1]])[1])) %>%
           dplyr::select(ID, sender="X1", correct = "X2")

df_long
# A tibble: 6 x 3
     ID sender correct
  <dbl>  <dbl> <chr>
1     1      1 y
2     2      2 n
3     3      1 n
4     1      2 y
5     2      1 n
6     3      2 y