在数据帧中创建一个新变量,其值取决于R中的两个其他变量

在数据帧中创建一个新变量,其值取决于R中的两个其他变量,r,for-loop,if-statement,R,For Loop,If Statement,我试图在一个数据框中创建一个新变量,以指示某人是否在1988年做过手术,或是否在1988年去世,或者这两种情况都不适用 我的数据类似于: test <- data.frame( ID = c(1:300), hyst = c(rep(1985:2014, 10)), death = c(rep(0,150),(rep(1985:2014,5))) ) test您的for循环不工作有两个原因。首先,您需要告诉它循环1:nrow(test),而不是nrow(test),其次,您需要告诉R它应

我试图在一个数据框中创建一个新变量,以指示某人是否在1988年做过手术,或是否在1988年去世,或者这两种情况都不适用

我的数据类似于:

test <- data.frame(
ID = c(1:300),
hyst = c(rep(1985:2014, 10)),
death = c(rep(0,150),(rep(1985:2014,5)))
)

test您的
for
循环不工作有两个原因。首先,您需要告诉它循环
1:nrow(test)
,而不是
nrow(test)
,其次,您需要告诉R它应该在哪里为
test
分配新值的特定行。以下代码将正确运行:

for (i in 1:nrow(test)) {
  if(test$hyst[i] == 1988 & test$death[i] != 1988) {
    test$y1988[i] <- "Y"
  } else if (test$death[i] == 1988) {
    test$y1988[i] <- "D"
  } else {
    test$y1988[i] <- "X"
  }
}
for(i在1:nrow(测试)){
if(测试$hyst[i]=1988和测试$death[i]!=1988){

test$y1988[i]您的
for
循环不起作用有两个原因。首先,您需要告诉它循环
1:nrow(test)
,而不是
nrow(test)
,其次,您需要告诉R它应该在哪里为
test
分配新值的特定行。以下代码将正确运行:

for (i in 1:nrow(test)) {
  if(test$hyst[i] == 1988 & test$death[i] != 1988) {
    test$y1988[i] <- "Y"
  } else if (test$death[i] == 1988) {
    test$y1988[i] <- "D"
  } else {
    test$y1988[i] <- "X"
  }
}
for(i在1:nrow(测试)){
if(测试$hyst[i]=1988和测试$death[i]!=1988){

测试$y1988[i]一个整洁的解决方案:
test%%突变(y1988=map2_chr(.x=hyst,.y=death,.f=~case_当(.x==1988&.y!=1988~“y”、.y==1988~“D”,1~“x”)
@JakeFisher-你为什么需要
map2_chr()
bit-这不是一个简单的if else/case\u when吗?@最近的邮件是的。谢谢你提醒我。我会编辑。一个更新的tidyverse解决方案:
test%%mutate(y1988=case\u when(hyst==1988&death!=1988~“Y”,death==1988~“D”,t~“X”)
tidyverse解决方案:
test%%mutate(y1988=map2\chr(.x=hyst,.y=death,.f=~case_when(.x==1988&.y!=1988~“y”,.y==1988~“D”,1~“x”)
@JakeFisher-你为什么需要
map2_chr()
位-这不就是一个简单的if else/case_when吗?@latemail是的,谢谢你提醒我。我会编辑。更新的tidyverse解决方案:
测试mutate(y1988=case_何时(hyst==1988&death!=1988~“Y”,death==1988~“D”,T~“X”)
它本质上也是两个变量的交互作用,这两个变量等于
1988
-
交互作用(data.frame(test[c(“hyst”,“death”)]==1988))
-例如
表(test$y1988,交互作用(data.frame(test[c(“hyst”,“death”)]==1988)))
为了比较。它本质上也是两个变量的交互作用,等于
1988
-
交互作用(data.frame(test[c(“hyst”,“death”)]==1988))
-例如
表(test$y1988,交互作用(data.frame(test[c(“hyst”,“death”)]==1988))
为了比较。
test$y1988 <- with(test, ifelse(hyst == 1988 & death != 1988, "Y",
                                ifelse(death == 1988, "D", "X")))
library(tidyverse)
library(magrittr)  # for the %<>% command
test %<>% mutate(y1988 = case_when(hyst == 1988 & death != 1988 ~ "Y", death == 1988 ~ "D", T ~ "X"))