带有 tidyr::spread() 的替代代码我的代码带有 tidyr::pivot_wider()
Alternative code with tidyr:: spread() of my code with tidyr::pivot_wider()
TLDR: 我对 tidyr::pivot_wider()
有疑问,怀疑它可能是 tidyr 的错误。我需要以下代码的 tidyr::spread() 替代代码,以确定它是 tidyr 的错误还是存在其他问题。或者,如果您知道哪里出了问题,请使用 tidyr::pivot_wider()
提供您的解决方案
我无法为我的代码提供数据。我的数据包含 1694 行、11 个变量和缺失值。
这是我的代码:
temp_data_tibb <- temp_data_tibb %>%
pivot_wider(names_from = Month, id_cols = ID, values_from = c("var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9"))
问题是,如果我对部分数据进行子集化,我的代码就可以正常工作。有了完整的数据,它给了我这样的错误:
Error: Invalid type returned by `vec_proxy_compare()`.
Call `rlang::last_error()` to see a backtrace.
In addition: Warning messages:
1: Values in `var1` are not uniquely identified; output will contain list-cols.
* Use `values_fn = list(var1 = list)` to suppress this warning.
* Use `values_fn = list(var1 = length)` to identify where the duplicates arise
* Use `values_fn = list(var1 = summary_fun)` to summarise duplicates
并且最后 5 行错误重复来自 values_from =
的每个变量。我试图通过逐渐子集化和测试来定位有问题的行,但找不到它,因为问题不在特定行中。
请使用 tidyr::spread() 提供替代解决方案,或者如果您有其他解决方案,请提供其他解决方案。
有几行具有相同的 ID
和 Month
。
我用这段代码来查找问题:
library(tidyverse)
# Load data from csv file.
orig_data <- read.csv(file="D:/Arch/data.csv", header=TRUE, sep=",")
temp_data <- orig_data
# Subset 3 months.
temp_data_first3M <- temp_data[temp_data$Month == "M1" | temp_data$Month == "M2" | temp_data$Month == "M3",]
# Replace "" with NA.
temp_data_first3M[temp_data_first3M == ""] <- NA
# Get frequency of all IDs (count of every similar value in ID column).
table_results <- as.data.frame(table(temp_data_first3M$ID))
names(table_results) <- c("ID", "Freq")
# Subset the rows that have Freq > 3
table_results_more_than_three <- table_results[table_results$Freq > 3,]
# View results.
View(table_results_more_than_three)
TLDR: 我对 tidyr::pivot_wider()
有疑问,怀疑它可能是 tidyr 的错误。我需要以下代码的 tidyr::spread() 替代代码,以确定它是 tidyr 的错误还是存在其他问题。或者,如果您知道哪里出了问题,请使用 tidyr::pivot_wider()
提供您的解决方案
我无法为我的代码提供数据。我的数据包含 1694 行、11 个变量和缺失值。
这是我的代码:
temp_data_tibb <- temp_data_tibb %>%
pivot_wider(names_from = Month, id_cols = ID, values_from = c("var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9"))
问题是,如果我对部分数据进行子集化,我的代码就可以正常工作。有了完整的数据,它给了我这样的错误:
Error: Invalid type returned by `vec_proxy_compare()`.
Call `rlang::last_error()` to see a backtrace.
In addition: Warning messages:
1: Values in `var1` are not uniquely identified; output will contain list-cols.
* Use `values_fn = list(var1 = list)` to suppress this warning.
* Use `values_fn = list(var1 = length)` to identify where the duplicates arise
* Use `values_fn = list(var1 = summary_fun)` to summarise duplicates
并且最后 5 行错误重复来自 values_from =
的每个变量。我试图通过逐渐子集化和测试来定位有问题的行,但找不到它,因为问题不在特定行中。
请使用 tidyr::spread() 提供替代解决方案,或者如果您有其他解决方案,请提供其他解决方案。
有几行具有相同的 ID
和 Month
。
我用这段代码来查找问题:
library(tidyverse)
# Load data from csv file.
orig_data <- read.csv(file="D:/Arch/data.csv", header=TRUE, sep=",")
temp_data <- orig_data
# Subset 3 months.
temp_data_first3M <- temp_data[temp_data$Month == "M1" | temp_data$Month == "M2" | temp_data$Month == "M3",]
# Replace "" with NA.
temp_data_first3M[temp_data_first3M == ""] <- NA
# Get frequency of all IDs (count of every similar value in ID column).
table_results <- as.data.frame(table(temp_data_first3M$ID))
names(table_results) <- c("ID", "Freq")
# Subset the rows that have Freq > 3
table_results_more_than_three <- table_results[table_results$Freq > 3,]
# View results.
View(table_results_more_than_three)