R 重塑后数据帧中出现意外值

R 重塑后数据帧中出现意外值,r,dataframe,dplyr,tidyr,R,Dataframe,Dplyr,Tidyr,因此,我有以下重塑功能: reshaped <- function(df){ df %>% select(subjects, diseases) %>% group_by(subjects, diseases) %>% count() %>% ungroup() %>% spread(diseases, n, drop=TRUE)} 现在,问题是,这些数字是假的。受试者1111111没有2个disease1实例或3个disease2实例

因此,我有以下重塑功能:

reshaped <- function(df){
df %>%
  select(subjects, diseases) %>% 
  group_by(subjects, diseases) %>%
  count() %>%
  ungroup() %>%
  spread(diseases, n, drop=TRUE)}
现在,问题是,这些数字是假的。受试者
1111111
没有2个
disease1
实例或3个
disease2
实例等。所有条目均应填写NA值。事实上,这些
disease_1,disease2,disease3
都是极为罕见的疾病,在整个数据中很少发生,只是碰巧按字母顺序排在第一位(都以A开头)

还有其他一些事情需要注意。首先,这是一个非常大的数据集,经过重塑的版本有大约38000列和120万行。我使用大约400 GB的RAM来处理这些数据(以块为单位),在压缩的RDs格式中,它的重量约为117 GB。但是,我没有得到任何内存错误。有趣的是,当我随机抽取100000名受试者(行)时,这个问题就消失了。我看到的数字非常现实(主要是NAs)。这表明问题不在于函数本身或数据,而在于观测值的大小


有人能提出为什么会发生这种情况,或者我如何解决这个问题吗?对我来说,这看起来像某种形式的溢出,当数据量太大时,R不知道该怎么做,只是把垃圾值放在那里。这一假设的问题在于,这些值虽然不合理,但并非完全随机。它们都少于10个左右。

请您展示一个小的可重复示例,并给出预期输出。thanks@akrun谢谢你看!问题是,对于我随机抽取的可重复的小样本,没有任何问题。这个函数工作得非常好。当观测数字开始变大(例如50万到100万)时,事情开始出错。这很奇怪。你能试试
库(data.table)吗;dcast(setDT(df)[,.N,.(受试者,疾病)],受试者+疾病~N)
FYI,选择的组计数可以减少到
df%>%count(受试者,疾病)%>%
此外,您可以尝试使用
pivot\u wide
i.le<代码>透视图(名称从=疾病,值从=n)
subject    disease1  disease2  disease3 ...
1111111        2         3         1
1111112        21        4         2
1111115        2         1         15
1111117        1         3         1