[英]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
值的數據集。 我試圖轉換NULL
到NA
使用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.