我想用两个不同的变量 tp join 连接两个数据框。出现错误,表示无法在第二个数据帧中找到变量。但是当我运行函数 colnames() 时,会显示列名称。为什么会这样呢?
df_new <- left_join(master_settlement_current_month, master_settlement, by = c("D.settlecounty", "NAMECOUNTY"))
Error: Join columns must be present in data.
x Problem with `NAMECOUNTY`.
Run `rlang::last_error()` to see where the error occurred.
colnames(master_settlement_current_month)[1:5]
[1] "month" "D.info_state" "D.info_county" "D.info_settlement" "D.settlecounty"
colnames(master_settlement)
[1] "NAME" "NAMEJOIN" "NAMECOUNTY" "COUNTYJOIN" "DATE" "DATA_SOURC" "IMG_VERIFD"
[8] "X" "Y" "kobo_label" "X.3" "X.2" "X.1" "INDEX"
[15] "P_CODE" "aok_sett_id" "name_county_low" "ALT_NAME1" "ALT_NAME2" "ALT_NAME3" "ALT_NAME4"
[22] "FUNC_CLASS" "CONF_SCORE" "SRC_VERIFD" "num_dup" "check_coord_v38"
Run Code Online (Sandbox Code Playgroud) 我想按数字聚合以下数据帧(变量 y 和 z)并按“权重”对其进行加权。其工作原理如下:
df = data.frame(number=c("a","a","a","b","c","c"), y=c(1,2,3,4,1,7),
z=c(2,2,6,8,9,1), weight =c(1,1,3,1,2,1))
aggregate = df %>%
group_by(number) %>%
summarise_at(vars(y,z), funs(weighted.mean(. , w=weight)))
Run Code Online (Sandbox Code Playgroud)
由于 summarise_at 不应再使用,因此我尝试使用 across。但我没有成功:
aggregate = df %>%
group_by(number) %>%
summarise(across(everything(), list( mean = mean, sd = sd)))
# this works for mean but I can't just change it with "weighted.mean" etc.
Run Code Online (Sandbox Code Playgroud) 我已经在这里问过类似的问题,答案如下。我想按“数字”聚合我的数据框并计算加权平均值。现在我想做一个加权和,但不知何故我无法找到如何将加权和应用于我的数据帧。Weighted.sum 函数不再适用于我的 R 版本。
df = data.frame(number=c("a","a","a","b","c","c"), y=c(1,2,3,4,1,7),
z=c(2,2,6,8,9,1), weight =c(1,1,3,1,2,1))
df %>%
group_by(number) %>%
summarise(across(c(y, z),
list( mean = ~mean(., na.rm = TRUE), sd = ~sd(., na.rm = TRUE),
weighted = ~weighted.mean(., w = weight))), .groups = 'drop')
Run Code Online (Sandbox Code Playgroud)