[英]Extracting rows from original data frame based on condition to create new data frame
[英]Create new data frame of percentages from values of an old data frame?
所以我想創建一個新的數據框,添加“有時”和“經常”列的值,然后將其除以總列的值,然后將其乘以 100 以獲得百分比(除非在 R 中存在自動執行此操作的 function)。 我將如何 go 這樣做?
您已在問題中添加了“sql”標簽。 Should you prefer SQL over R for reasons of experience and/or knowledge you might be interested in the fabulous sqldf
package which allows you to use SQL syntax within R. 您必須首先通過install.packages("sqldf")
下載它,然后您可以像在
expl <- data.frame(sometimes = c(1, 2, 4), often = c(2, 2, 2), total =c(6, 9, 8))
library(sqldf)
sqldf("SELECT 100*(sometimes+often)/total FROM expl")
更常用的方法是在同一個 data.frame 中添加一個百分比列,而不是引入一個新的。 這樣,所有數據都保存在一起,並且您不會丟失到例如周列的鏈接。 go 的一種方法是以下單行:
expl <- data.frame(sometimes = c(1, 2, 4), often = c(2, 2, 2), total =c(6, 9, 8))
print(expl)
expl$percent = 100 * (expl$sometimes + expl$often)/expl$total
print(expl)
首先,它看起來好像Total
、 Sometimes
和Often
是字符,因為它們中有逗號,所以你需要去掉逗號並將它們轉換為數字。 你可以這樣做(假設你的 dataframe 被稱為mydata
):
for(i in c("Total","Sometimes","Often")) mydata[[i]] = as.numeric(gsub(",", "", mydata[[i]])
然后你可以使用伯納德的答案:
mydata$percent = 100 * (mydata$Sometimes + mydata$Often)/mydata$Total
使用tidyverse
的另一個選項:
library(tidyverse)
newdataframe <- olddataframe %>%
mutate(percent = (Sometimes+Often)/Total*100) %>%
select(percent)
但如前所述,最好將百分比列與其他數據一起保留。 在這種情況下,刪除%>% select(percent)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.