簡體   English   中英

根據另一列中的4個值創建新列

[英]Create new column based on 4 values in another column

我想基於另一列中的4個值創建一個新列。

if col1=1 then col2= G;
if col1=2 then col2=H;
if col1=3 then col2=J;
if col1=4 then col2=K.

我怎么做R? 我需要有人幫忙解決這個問題。 我試過if / else和ifelse,但似乎沒有工作。 謝謝

你可以使用嵌套的ifelse

col2 <- ifelse(col1==1, "G",
        ifelse(col1==2, "H",
        ifelse(col1==3, "J",
        ifelse(col1==4, "K",
                        NA  )))) # all other values map to NA

在這個簡單的情況下,這是過度的,但對於更復雜的...

您有一個特殊情況,即查找索引為整數1:4的值。 這意味着您可以使用矢量索引在一個簡單的步驟中解決您的問題。

首先,創建一些示例數據:

set.seed(1)
dat <- data.frame(col1 = sample(1:4, 10, replace = TRUE))

接下來,定義查找值,並使用[ subsetting來查找所需的結果:

values <- c("G", "H", "J", "K")
dat$col2 <- values[dat$col1]

結果:

dat
   col1 col2
1     2    H
2     2    H
3     3    J
4     4    K
5     1    G
6     4    K
7     4    K
8     3    J
9     3    J
10    1    G

更一般地,您可以使用[子集與match相結合來解決此類問題:

index <- c(1, 2, 3, 4)
values <- c("G", "H", "J", "K")
dat$col2 <- values[match(dat$col1, index)]
dat
   col1 col2
1     2    H
2     2    H
3     3    J
4     4    K
5     1    G
6     4    K
7     4    K
8     3    J
9     3    J
10    1    G

有很多方法可以做到這一點,但這里有一個。

set.seed(357)
mydf <- data.frame(col1 = sample(1:4, 10, replace = TRUE))
mydf$col2 <- rep(NA, nrow(mydf))
mydf[mydf$col1 == 1, ][, "col2"] <- "A"
mydf[mydf$col1 == 2, ][, "col2"] <- "B"
mydf[mydf$col1 == 3, ][, "col2"] <- "C"
mydf[mydf$col1 == 4, ][, "col2"] <- "D"

   col1 col2
1     1    A
2     1    A
3     2    B
4     1    A
5     3    C
6     2    B
7     4    D
8     3    C
9     4    D
10    4    D

這是一個使用carrecode

library(car)
mydf$col3 <- recode(mydf$col1, "1" = 'A', "2" = 'B', "3" = 'C', "4" = 'D')

還有一個來自這個問題

mydf$col4 <- c("A", "B", "C", "D")[mydf$col1]

你可以看看?symnum

在你的情況下,像:

col2<-symnum(col1, seq(0.5, 4.5, by=1), symbols=c("G", "H", "J", "K"))

應該讓你親近

暫無
暫無

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

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