我想就這個規則一定柱: Y2000/S2000 = NEW2000 ....與規則劃分列中的R
這就是例子,我想要什麼
Y2000 Y2001 Y2003 S2000 S2001 S2003 | NEW2000 NEW2001 NEW2003
5 10 15 1 5 15 | 5/1=5 10/5=2 15/15=1
我嘗試在dplyr包中使用mutate,但是我不熟悉這個函數。 如何製作R ...中的代碼?
我想就這個規則一定柱: Y2000/S2000 = NEW2000 ....與規則劃分列中的R
這就是例子,我想要什麼
Y2000 Y2001 Y2003 S2000 S2001 S2003 | NEW2000 NEW2001 NEW2003
5 10 15 1 5 15 | 5/1=5 10/5=2 15/15=1
我嘗試在dplyr包中使用mutate,但是我不熟悉這個函數。 如何製作R ...中的代碼?
這裏是如何做到這一點的甚至許多列(年)
你的數據
df <- data.frame(Y2000=5, Y2001=10, Y2003=15, S2000=1, S2001=5, S2003=15)
定義新的列名
newcols <- sapply(c(2000,2001,2003), function(i) paste0("NEW",i))
[1] "NEW2000" "NEW2001" "NEW2003"
使用dplyr
library(dplyr)
df1 <- df %>%
rowwise() %>%
mutate_(.dots = setNames(paste0(gsub("NEW","Y",newcols),"/",gsub("NEW","S",newcols)), newcols))
輸出
Y2000 Y2001 Y2003 S2000 S2001 S2003 NEW2000 NEW2001 NEW2003
1 5 10 15 1 5 15 5 2 1
以下是計算所需輸出中三列的方法。
library(dplyr)
your_data %>%
mutate(
NEW2000 = Y2000/S2000,
NEW2001 = Y2001/S2001,
NEW2003 = Y2003/S2003
)
如果你有這樣的數百列,有辦法避免必須鍵入每個名稱。
嗯,我想.... NEW2000到NEW2030所以我想使用循環或任何其他功能.... –
更好的選擇將是'基地R',我.. 'your_data [paste0(「NEW」,2000:2002)] < - your_data [1:3]/your_data [4:6]' – akrun
@akrun是正確的,如果你想和base R一起使用。這個例子更容易概括到'n'列的數據。 –
啊,我想.... NEW2000到NEW2030所以我想使用循環或任何其他功能.. –