小编tit*_*euf的帖子

left_join 表示列不存在,即使它存在

我想用两个不同的变量 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)

r dplyr

4
推荐指数
1
解决办法
5841
查看次数

加权平均值、summarise() 和 across()

我想按数字聚合以下数据帧(变量 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)

r

3
推荐指数
1
解决办法
1290
查看次数

dplyr“加权和”和 across()

我已经在这里问过类似的问题,答案如下。我想按“数字”聚合我的数据框并计算加权平均值。现在我想做一个加权和,但不知何故我无法找到如何将加权和应用于我的数据帧。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)

r

2
推荐指数
1
解决办法
2682
查看次数

标签 统计

r ×3

dplyr ×1