我的代码与tidyr :: pivot_wider()的tidyr :: spread()替代代码

时间:2019-10-26 06:17:25

标签: r tidyverse tidyr spread

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 

,并为values_from =中的每个变量重复最后5行错误。我试图通过逐步进行子集化和测试来定位有问题的行,但是由于问题不在特定的行中而无法找到它。

请使用tidyr :: spread()提供替代解决方案,如果有的话,请提供其他解决方案。

1 个答案:

答案 0 :(得分:0)

已解决。那里有几行具有相同的IDMonth

我使用此代码来查找问题(也许可以帮助其他人):

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)