簡體   English   中英

R 新列(變量),rowSums 跨具有 NULL 值的列表

[英]R new column (variable) that rowSums across lists with NULL values

我有一個data.frame

UID<-c(rep(1:25, 2), rep(26:50, 2))
Group<-c(rep(5, 25), rep(20, 25), rep(-18, 25), rep(-80, 25))
Value<-sample(100:5000, 100, replace=TRUE)
df<-data.frame(UID, Group, Value)

但我需要將值分隔成新行,所以我運行這個:

df<-pivot_wider(df, names_from = Group, 
                    values_from = Value, 
                    values_fill = list(Value = 0))

這將NULL引入數據集。 抱歉,無法找到獲取具有NULL值的示例數據集的方法。 注意:這現在是一個tbl_df tbl data.frame

這些不是很好的變量名,所以我運行這個:

colnames(df)[which(names(df) == "20")] <- "pos20"
colnames(df)[which(names(df) == "5")] <- "pos5"
colnames(df)[which(names(df) == "-18")] <- "neg18"
colnames(df)[which(names(df) == "-80")] <- "neg80"

我希望能夠做的是創建一個跨列的rowSums新列(變量)。 所以我運行這個:

df<-df%>%
  replace(is.na(.), 0) %>%
  mutate(rowTot = rowSums(.[2:5]))

這當然適用於示例數據集,但不適用於具有NULL值的數據集。 我試圖轉換NULLNA使用df[df== "NULL"] <- NA但這些值不發生變化。 我曾嘗試使用as.numeric(as.character(unlist(df[[2]])))將列表轉換為數字,但我收到一個錯誤,告訴我我的行數不相等,我想這是預期的。

我意識到可能有一個更好的過程來獲得我想要的最終結果,因此非常感謝您對此提出的任何建議。

編輯:這是實際數據集的鏈接,在使用pivot_wider后將引入Null值。 https://drive.google.com/file/d/1YGh-Vjmpmpo8_sFAtGedxzfCiTpYnKZ3/view?usp=sharing

如果沒有發生錯誤的實際可重現示例,很難有信心地回答,但我將進行猜測。

我認為您的pivot_wider步驟會生成列表列(意味着某些值是向量),這就是您獲得NULL值的原因。 為每個Group創建一個唯一的行,然后使用pivot_wider rowSums也有na.rm參數,所以你不需要replace

library(dplyr)
df %>% 
  group_by(temp) %>%   
  mutate(row = row_number()) %>% 
  pivot_wider(names_from = temp, values_from = numseeds) %>%
  mutate(rowTot = rowSums(.[3:6], na.rm = TRUE))

如果需要,請根據您在rowSums的數據更改列號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM