簡體   English   中英

根據另一列創建一個新的數據框列

[英]Create a new data frame column based on another column

我有一個包含兩列的數據框,並且想要創建第三列,該列本質上是一個布爾值,用於確定第二列是否包含特定的一組指定值。

f <- data.frame(name=c("John", "Sara", "David", "Chad"),
                 car=c("Honda|Ford", "BMW", "Toyota|Chevy|Ford", 
                 "Toyota|Chevy|Ford|Honda"))

我做的第一件事是刪除|。 從第二列的每個字符串中提取,然后將其值放在第三列中

library(stringr)
g = str_replace_all(f$car, "[^[:alnum:]]", " ")
f$make = c(g)
f

如果要創建另一個列(布爾值),如果make包含普通車,則為1,如果包含非普通車,則為0,我現在要執行的操作。

common = c("Honda", "Ford", "Toyota", "Chevy")
not_common = c("BMW", "Lexus", "Acura")

我已經嘗試了一些方法,包括stringer軟件包和ifelse來產生以下輸出。

   name                     car                    make       common   
1  John              Honda|Ford              Honda Ford           1
2  Sara                     BMW                     BMW           0
3 David       Toyota|Chevy|Ford       Toyota Chevy Ford           1
4  Chad Toyota|Chevy|Ford|Honda Toyota Chevy Ford Honda           1

由於可以同時使用普通和不普通的汽車作為條目,因此普通的品牌應該覆蓋普通的品牌,並且該行的普通列中的值應為0。 因此,如果一個條目同時包含BMW和Ford,則該條目在公共列中應為0。

任何人都可以幫助完成此任務。

哦,這是我嘗試使用Stringr包的方法,但是它不起作用。

common = c("Honda", "Ford", "Toyota", "Chevy")
not_common = c("BMW", "Lexus", "Acura")
common_match <- str_c(common)
not_match <- str_c(not_common)

main <- function(df) {
  f$new_make <- str_detect(f$make, common_match)
  df
}

main(f)

謝謝!

不知道這是否是最有效的方法,但是請嘗試使用grepifelse應用於f$car每個值。 | 字符僅表示grep搜索項or將其組合在一起,而與數據中的分隔符無關。

f$common <- sapply(f$car,function(x) ifelse(length(grep("BMW|Lexus|Acura",x))>0,0,1))

結果:

> f
   name                     car common
1  John              Honda|Ford      1
2  Sara                     BMW      0
3 David       Toyota|Chevy|Ford      1
4  Chad Toyota|Chevy|Ford|Honda      1

另一種方法和比較

f2 <- f[rep(1:4,50000),]
system.time({
v <- sapply(f2$make, strsplit, " ")
sapply(v, function(x) max(1-not_common %in% x)*max(common %in% x))
})
 user  system elapsed 
 7.94    0.01    8.00 

system.time(sapply(f2$car,function(x) ifelse(length(grep("BMW|Lexus|Acura",x))>0,0,1)))
 user  system elapsed 
28.72    0.04   28.87 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM