簡體   English   中英

更改列R中的值

[英]Change value in column R

我有一個像下面的子集的數據集

    col1   col2   col3
     y      
            y
     y      y
                   y
            y
     y

實際上,我的數據集描述的是葯物過量。 每個人死亡時該系統中的葯物欄中都有一個“ y”。 我想做的是將“ y”更改為對應的列。 例如,我希望上面的示例數據集顯示為

    col1   col2   col3
    col1      
           col2
    col1   col2
                  col3
           col2
    col1

這樣一來,我以后就可以將這三列結合起來,以了解每個人的死因,而只看一眼。 數據集稱為“ Data1”,所以我知道我需要在某個時候放置

    Data1$col1
    Data1$col2
    Data1$col3

有人請幫忙。我對此很陌生。

如果為患者ID添加一列,則可以使用data.tablemelt函數將其重新格式化為長格式:

df <- data.frame(id = 1:6, col1 = c("y", NA, "y", NA, NA, "y"),
                 col2 = c(NA, "y", "y", NA, "y", NA),
                 col3 = c(NA, NA, NA, "y", NA, NA))

df1 <- melt(setDT(df), id.vars = "id", measure.vars = c("col1", "col2", "col3"))
df1 <- df1[order(id)][is.na(value) == FALSE]

那么這將為您提供:

> df1
   id variable value
1:  1     col1     y
2:  2     col2     y
3:  3     col1     y
4:  3     col2     y
5:  4     col3     y
6:  5     col2     y
7:  6     col1     y

在列中,您可以檢查值在哪里,並獲取邏輯向量,您接下來將使用該邏輯對所述列建立索引。 在我們的情況下:

Data1$col1 == "y"

會給你一個像

## [1] TRUE FALSE TRUE FALSE FALSE TRUE

您可以使用它來訪問列中的“ y”:

Data1$col1[Data1$col1 == "y"]
## [1] "y" "y" "y"

它僅在存在“ y”的地方讀取列的條目,在這種情況下有點無聊,但通常非常有用,例如當您在一列中使用值來操縱另一列時。 上面的行也是雙向的:您可以讀出值(如上),我們可以使用賦值運算符為指定的條目分配新值:

Data1$col1[Data1$col1 == "y"] = "col1"

然后,您可以為每一列重復執行該代碼。

我能夠弄清楚:

    Data1$Col1 <- as.character(Data1$Col1)
    Data1$Col1[Data1$Col1 %in% "y"] <- "Col1"

感謝您的所有幫助!

已經有一些出色的答案,但是我仍然在這里寫下我的解決方案,包括列循環:

df <- data.frame(col1 = c("y", NA, "y", NA, NA, "y"),
                 col2 = c(NA, "y", "y", NA, "y", NA),
                 col3 = c(NA, NA, NA, "y", NA, NA), stringsAsFactors=FALSE)

注意: stringAsFactors=FALSE很重要!

for (name in colnames(df)){
  df[name][df[name]=="y"] = name
}

然后,您將得到想要的:

> df

  col1 col2 col3
1 col1 <NA> <NA>
2 <NA> col2 <NA>
3 col1 col2 <NA>
4 <NA> <NA> col3
5 <NA> col2 <NA>
6 col1 <NA> <NA>

暫無
暫無

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

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