我有以下数据框:
df <- data.frame(type = c("planes", "trains", "automobiles"), t1 = c(4, 5, 6), t2 = c(20, 60, 24), t3 = c(100, 120, 72), t4 = c(800, 360, 144))
df
type t1 t2 t3 t4
1 planes 4 20 100 800
2 trains 5 60 120 360
3 automobiles 6 24 72 144
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数,它接受每列中的值并将它们除以前一列,从t2/t1开始,这样我得到一个如下所示的新数据框:
new_df
type t1 t2 t3 t4
1 planes 5 5 8
2 trains 12 2 3
3 automobiles 4 3 2
Run Code Online (Sandbox Code Playgroud)
使用扫描功能可能有一种方法可以做到这一点,但我还没有找到它.
提前致谢!
df[, 3:5] <- df[, 3:5] / df[, 2:4]
# type t1 t2 t3 t4
# 1 planes 4 5 5 8
# 2 trains 5 12 2 3
# 3 automobiles 6 4 3 2
Run Code Online (Sandbox Code Playgroud)
Map 也会有用
df[, 3:5] <- Map('/', df[, 3:5], df[, 2:4])
# type t1 t2 t3 t4
# 1 planes 4 5 5 8
# 2 trains 5 12 2 3
# 3 automobiles 6 4 3 2
Run Code Online (Sandbox Code Playgroud)