簡體   English   中英

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

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

假設我有以下數據框。

dat <- data.frame(city=c("Chelsea","Brent","Bremen","Olathe","Lenexa","Shawnee"), 
        tag=c(rep("AlabamaCity",3), rep("KansasCity",3)))

我想包括第三列,Tag2,它將是每個 state 來自 Tag 列的區域。 因此,前三個城市將最終成為“南部”,后三個城市將成為“中西部”。 數據看起來像。

     city         tag      tag2
1 Chelsea AlabamaCity    South
2   Brent AlabamaCity    South
3  Bremen AlabamaCity    South
4  Olathe  KansasCity    Midwest
5  Lenexa  KansasCity    Midwest
6 Shawnee  KansasCity    Midwest

我嘗試了以下命令,但它沒有創建新列。 誰能告訴我怎么了。

fixit <- function(dat) {
     for (i in 1:nrow(dat)) {
          Words = strsplit(as.character(dat[i, 'tag']), " ")[[1]]
          if(any(Words == 'Alabama')) {
                dat[i, 'tag2'] <- "South"
          }
          if(any(Words == 'Kansas')) {
                dat[i, 'tag2'] <- "Midwest"
          }
     }
     return(dat)
}

謝謝您的幫助。

它不起作用,因為您創建Wordsstrsplit()是錯誤的。 (你知道如何調試 R 函數不是嗎?)

debug: Words = strsplit(as.character(dat[i, "tag"]), " ")[[1]]
Browse[2]> 
debug: if (any(Words == "Alabama")) {
    dat[i, "Tag2"] <- "South"
}
Browse[2]> Words
[1] "AlabamaCity"

在這一點上, Words肯定不等於"Alabama""Kansas" ,而且永遠不會,所以if()子句永遠不會被執行。 R正在返回dat ,您的 function 沒有改變dat

這將為您完成,並且更通用。 首先創建一個數據框,其中包含與區域匹配的單詞

region <- data.frame(tag = c("Alabama","Kansas"), tag2 = c("South","Midwest"),
                     stringsAsFactors = FALSE)

在此數據幀的行上循環,匹配"tag"並插入適當的"tag2"

for(i in seq_len(nrow(region))) {
    want <- grepl(region[i, "tag"], dat[, "tag"])
    dat[want, "tag2"] <- region[i, "tag2"]
}

這將導致:

> dat
     city         tag    tag2
1 Chelsea AlabamaCity   South
2   Brent AlabamaCity   South
3  Bremen AlabamaCity   South
4  Olathe  KansasCity Midwest
5  Lenexa  KansasCity Midwest
6 Shawnee  KansasCity Midwest

這是如何運作的? 關鍵位是grepl() 如果我們只為一場比賽執行此操作, "Alabama"grepl()的使用方式如下:

grepl("Alabama", dat[, "tag"])

並返回一個邏輯,指示哪些"tag"元素與字符串“阿拉巴馬”匹配:

> grepl("Alabama", dat[, "tag"])
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE

暫無
暫無

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

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