假设我有以下数据框:
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)
你可以做
test * test2[rownames(test), "mean"]
# X Y
# T1 1 4
# T2 4 10
# T3 15 30
Run Code Online (Sandbox Code Playgroud)
我会做以下事情:
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)
希望这可以帮助