У меня действительно огромный набор данных, я делюсь им с помощью ссылки , потому что я не знаю другого способа показать его вам другим способом. Мне нужно, чтобы файл выглядел как это . Вторая ссылка - это пример полного файла, потому что делать это «вручную» очень долго.
Мне было предложено попробовать это Но, похоже, Мне показалось, что моего примера в этом посте было недостаточно, потому что с любым из предложений я получаю тот результат, который мне нужен. Я пытался в течение недели, и я действительно не знаю, как решить эту проблему, поэтому я решил опубликовать свои настоящие данные, используя ссылку, на случай, если это будет более полезно. Когда я пытаюсь использовать dplyr
и tidyr
, я получаю это предупреждающее сообщение
d<-read.csv("m.tot3.csv",header=TRUE, sep=",",dec=".")
df<-data.frame(d)
library(dplyr)
library(tidyr)
library(data.table)
sub1 <- df[c(TRUE, FALSE),]
sub2 <- df[c(FALSE, TRUE),]
tibble(ind = c(row(sub1)), col1 = factor(unlist(sub1), levels = letters[1:1688]),
col2 = as.integer(unlist(sub2))) %>%
pivot_wider(names_from = col1, values_from = col2,
values_fill = list(col2 = 0)) %>%
select(-ind)
Я получаю это сообщение об ошибке
Error: Can't convert <double> to <list>.
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning message:
Values in `col2` are not uniquely identified; output will contain list-cols.
Use `values_fn = list(col2 = list)` to suppress this warning.
Use `values_fn = list(col2 = length)` to identify where the duplicates arise
Use `values_fn = list(col2 = summary_fun)` to summarise duplicates
Использование reshape
sub1 <- df[c(TRUE, FALSE),]
sub2 <- df[c(FALSE, TRUE),]
out <- reshape(
data.frame(ind = c(row(sub1)),
col1 = factor(unlist(sub1), levels = letters[1:1688]),
col2 = as.integer(unlist(sub2))),
idvar = 'ind', direction = 'wide', timevar = 'col1')[-1]
names(out) <- sub("col2\\.", "", names(out))
out[is.na(out)] <- 0
row.names(out) <- NULL
Я получаю это предупреждающее сообщение
Warning messages:
1: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying, :
there are records with missing times, which will be dropped.
2: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying, :
multiple rows match for col1=NA: first taken`
наконец, используя data.table
d_test<-melt(
setDT(
setnames(
data.table::transpose(df),
paste(rep(1:(nrow(d)/2), each = 2), c("name", "value"), sep = "_"))),
measure = patterns("name", "value"))[
, dcast(.SD, variable ~ value1, value.var = "value2", fill = 0)]
Я получаю это
Я действительно не Я не знаю, как ее решить, и любой ответ приветствуется. С уважением