如何从dataframe中提取csv列并将其与现有dataframe组合
我有一个数据框架,其中包含来自广泛格式问卷的数据。但有一列包含压缩实验数据,其中包含长格式的csv格式数据(作为字符串)。所以我想逆转这种压缩,恢复一个完整的表格数据集。应重复宽格式中的值以填充添加的行 这就是我的数据框架:如何从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,",
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