如何将数据框转换为列表以进行点击流分析
How to Convert a Data Frame to a List for Clickstream Analysis
我是新手 R 用户,也是论坛的新手。
我有一个需要转换的数据框,以便每一行都是一个字符向量。
我想从数据框中删除 0,以便每行可以有不同的长度。所以本质上每一行都是列表中的一个单独的字符向量。
我所在的位置如下:
mydf<-matrix(sample(0:1,12*5, replace = T),ncol =4)
colnames(mydf)<-letters[1:ncol(mydf)]
swapcol <-which(mydf == 1, arr.ind = T)
mydf[swapcol]<-colnames(mydf)[swapcol[,2]]
mydf
代码生成一个数据框,其中列标签是值。我需要以下输出:
Desired List Result
格式似乎是我需要的格式,以便将数据读入包点击流。
谢谢
此 returns 包含您要求的格式的列表:
list(
apply(mydf, 1, function(a_row) {
my_paste <- function(...){
paste(..., sep = ", ")
}
a_row <- Reduce(my_paste, a_row)
a_row <- gsub("0(, )*", "", a_row)
a_row <- gsub(", $", "", a_row)
})
)
这个 returns 长度为 1 的列表。用 as.list
替换 list
,returns 长度为 15 的列表。
试试这个解决方案:
library(tidyverse)
s <- sample(x = 0:1, size = 15 * 4, replace = TRUE)
mx <- matrix(data = s, nrow = 15, ncol = 4, byrow = TRUE,
dimnames = list(c(paste("User", 1:15, sep = " ")), c("V1", "V2", "V3", "V4")))
df2 <- mx %>% as.data.frame() %>% rownames_to_column() %>% as_tibble()
%>% mutate(
V1 = ifelse(test = V1 == 1, yes = "a", no = NA),
V2 = ifelse(test = V2 == 1, yes = "b", no = NA),
V3 = ifelse(test = V3 == 1, yes = "c", no = NA),
V4 = ifelse(test = V4 == 1, yes = "d", no = NA))
mx2 <- t(apply(X = df2, MARGIN = 1, FUN = function(x{return(c(x[!is.na(x)],
x[is.na(x)]))}))
我是新手 R 用户,也是论坛的新手。 我有一个需要转换的数据框,以便每一行都是一个字符向量。 我想从数据框中删除 0,以便每行可以有不同的长度。所以本质上每一行都是列表中的一个单独的字符向量。 我所在的位置如下:
mydf<-matrix(sample(0:1,12*5, replace = T),ncol =4)
colnames(mydf)<-letters[1:ncol(mydf)]
swapcol <-which(mydf == 1, arr.ind = T)
mydf[swapcol]<-colnames(mydf)[swapcol[,2]]
mydf
代码生成一个数据框,其中列标签是值。我需要以下输出:
Desired List Result
格式似乎是我需要的格式,以便将数据读入包点击流。 谢谢
此 returns 包含您要求的格式的列表:
list(
apply(mydf, 1, function(a_row) {
my_paste <- function(...){
paste(..., sep = ", ")
}
a_row <- Reduce(my_paste, a_row)
a_row <- gsub("0(, )*", "", a_row)
a_row <- gsub(", $", "", a_row)
})
)
这个 returns 长度为 1 的列表。用 as.list
替换 list
,returns 长度为 15 的列表。
试试这个解决方案:
library(tidyverse)
s <- sample(x = 0:1, size = 15 * 4, replace = TRUE)
mx <- matrix(data = s, nrow = 15, ncol = 4, byrow = TRUE,
dimnames = list(c(paste("User", 1:15, sep = " ")), c("V1", "V2", "V3", "V4")))
df2 <- mx %>% as.data.frame() %>% rownames_to_column() %>% as_tibble()
%>% mutate(
V1 = ifelse(test = V1 == 1, yes = "a", no = NA),
V2 = ifelse(test = V2 == 1, yes = "b", no = NA),
V3 = ifelse(test = V3 == 1, yes = "c", no = NA),
V4 = ifelse(test = V4 == 1, yes = "d", no = NA))
mx2 <- t(apply(X = df2, MARGIN = 1, FUN = function(x{return(c(x[!is.na(x)],
x[is.na(x)]))}))