ifelse 用于字符串中的不同位置

ifelse for different locations in a string

我想帮助我使用字符串变量 x1 上的 ifelse 语句创建分类值(称为 x2)。或者 'ifelse' 当然不是,但我认为它应该与 'ifelse' 一起使用?

image of dataframe

输入的数据框:
patientnumber <- c('1', '2', '3')
x1 <- c('54836', '12789', '78955')

来自 x1 的 class 是 'character'。 x1 中的字符具有多重含义。

如果x1中的第一个字符== 1,那么我想要一个新的变量x2变成'yes',如果不是,'no'。我所做的是:使用 substr 创建一个新列(称为 x1.1),然后在该新列上使用 ifelse 语句,这样就可以了。

data$x1.1 <- substr(data$x1, 1, 1) #从x1中取出第一个字符创建x1.1,总共使用1个字符

数据$x2 <- ifelse(数据$x1.1 == 1, 'yes', 'no')

image of dataframe with added x1.1 and x2

但我想知道我是否可以把它做得更短。因此无需创建 x1.1 即可获得 x2。我有这样的想法,但它不起作用:

data$x2 <- ifelse(data$x1[ 1 ] == 1, 'yes', 'no') # 所以我调用 [=66 而不是 'x1' =] 所以这就是我希望代码执行的操作:

对于患者 1,如果 x1 中的第一个字符 == 1,则新列 x2 中的结果 == 'yes',如果不是,则 'no'

对于患者 2,如果 x1 中的第一个字符 == 1,则新列 x2 中的结果 == 'yes',如果不是,则 'no'

对于患者 3,如果 x1 中的第一个字符 == 1,则新列 x2 中的结果 == 'yes',如果不是,则 'no'

此外,除了看第一个字符,我还希望能够:

-看第二个字

-一起看第二+第三个字

我有办法做到这一点,但实际上我有 x1、x2 x3....x29 x30 而不是一个 x1。其中有 4 个含义,所以这样做 'my way' 意味着我首先必须先创建 120 个新列,然后才能开始创建正确的对应分类列。它使我的数据框更大,并提供了很多我想避免的代码行。

我希望这个社区能帮助我。干杯:)

P.S。 这是我在 Whosebug 上的第一个 post,如果您有关于如何使我的 post 变得更好的提示,请告诉我(我已经看过一些 youtube 视频,但它们没有帮助,我最大的问题 no是如何以一种很好的方式显示数据框)

P.S。我使用了搜索功能,但是找不到这个问题的答案。

试试这个:

data$x2 <- ifelse(substr(x1, 1, 1) == "1", "yes", "no")

如果您需要多个 ifelse 语句,也可以看看 dplyr::case_when