如何将整行与另一个数据框中的匹配行名称相乘?

Mar*_*cus 6 r

假设我有以下数据框:

    test <- data.frame(X = c(1,2,3), Y = c(4,5,6), row.names = c("T1", "T2", "T3"))

    test2 <- data.frame(mean = c(1,2,5), row.names = c("T1", "T2", "T3"))
Run Code Online (Sandbox Code Playgroud)

我想将测试数据帧中的所有行乘以由行名称匹配的 test2 数据帧中的值。我该怎么做才能得到这样的答案:

    answer <- data.frame(X = c(1,4,15), Y = c(4,10,30), row.names = c("T1", "T2", "T3"))
Run Code Online (Sandbox Code Playgroud)

mar*_*kus 5

你可以做

test * test2[rownames(test), "mean"]
#     X  Y
# T1  1  4
# T2  4 10
# T3 15 30
Run Code Online (Sandbox Code Playgroud)


Dan*_*nby 1

我会做以下事情:

x <- test %>% 
      rownames_to_column("id") %>% 
      left_join(test2 %>% rownames_to_column("id"), by = "id") %>%
      mutate_at(vars(colnames(test)), list(~ . * mean)) %>% 
      select(-mean)
Run Code Online (Sandbox Code Playgroud)

如果您有具有相同名称的列(例如,名为 X 的两列),那么它们将被标记为 X.1 和 X.2 如果您想摆脱句号及其后面的所有内容,我会这样做:

colnames(x) <- str_replace(colnames(x),"\\..*","")
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助