2016-09-11 74 views
0

我已閱讀如何將列中的值除以R中另一列中的值。但是,我想知道如何將列中的值分成多列值在一個列中。另外我的第一列是由非數字組成的。如何在R中編寫腳本來完成所有這些操作並避免非數字操作?將列中的值除以另一列中的值R

我想通過SVL在.csv文檔下面

species SVL  HDL HDW 
PM  26.68 9.27 9.83 
PM  23.46 8.41 8.59 
PM  24.15 8.36 8.1 
PM  23.09 8.91 8.79 
Tioman 31.8 11.65 11.18 
Tioman 29  10.88 10.66 
+0

在「種SVL HDL HDW PM 26.68 9.27 9.83 PM 23.46 8.41下午8點59分24.15 8.36下午8點01分23.09 8.91 8.79刁曼31.8 11.65 11.18 Tioman 29 10.88 10.66「,沒有偶數換行符 – user31264

+1

'df1 [c(」HDW「,」HDL「)]/df1 $ SVL' – user2957945

+1

@ user2957945雖然你很好,但引用它們更常見按列索引而不是列表索引? 'dat [,c(「HDL」,「HDW」)]/dat [,「SVL」]' – r2evans

回答

0

劃分HDLHDW我喜歡dplyr包裝這個東西。鑑於您已將數據作爲csv讀取,那麼使用mutate命令很容易將新列定義爲其他列的功能。 例如

require(dplyr) 
mydata<-tbl_df(mydata) #Make it into a tbl class 
#Define the new columns 
mydata<-mydata%>% 
    mutate(HDLSVL=HDL/SVL)%>% 
    mutate(HDWSVL=HDW/SVL) 
+0

'?mutate_all'可能會使這個更簡單一些。 – thelatemail

+0

謝謝 - 我還沒有遇到'mutate_all'。看起來我需要更新我的dplyr版本:) – amg

+0

另外,不需要兩次'mutate()'調用。可以只是'mydata%>%mutate(HDLSVL = HDL/SVL,HDWSVL = HDW/SVL)' –

0

以下是data.table的一個選項。我們將'data.frame'轉換爲'data.table'(setDT(df1)),在.SDcols中指定感興趣的列,循環遍歷它(lapply(..)並用'SVL'分隔(/)。

library(data.table) 
setDT(df1)[, lapply(.SD, `/`, df1$SVL), .SDcols = HDL:HDW] 

如果我們需要創建一個基於分頻輸出新列,然後

setDT(df1)[, paste0(names(df1)[3:4],"_SVL") := lapply(.SD, `/`, df1$SVL), .SDcols = HDL:HDW] 
相關問題