gpt4 book ai didi

r - R 中 Stata 函数 inlist() 的等效项是什么?

转载 作者:行者123 更新时间:2023-12-01 17:22:17 26 4
gpt4 key购买 nike

Stata 的 inlist允许我们引用变量的实际值或字符串值。我想知道R是否有这样的功能。

示例:

我想从变量state中选择八个状态(您可以将其视为任何数据帧中的state列,其中state采用50个字符串值(美国各州))。

    inlist(state,"NC","AZ","TX","NY","MA","CA","NJ")

我想从变量age中选择九个年龄值(您可以将其视为任何数据框中的age列,其中age采用从 0 到 90 的数值)。

    inlist(age,16, 24, 45, 54, 67,74, 78, 79, 85) 

问题:

age<-c(0:10) # for this problem age takes values from 0 to 10 only
data<-as.data.frame(age) # age is a variable of data frame data
data$m<-ifelse(c(1,7,9)%in%data$age,0,1) # generate a variable m which takes value 0 if age is 1, 7, and 8 and 1, otherwise
Expected output:
age m
1 0 1
2 1 0
3 2 1
4 3 1
5 4 1
6 5 1
7 6 1
8 7 0
9 8 1
10 9 0
11 10 1

最佳答案

我想你想要%in% :

statevec <- c("NC","AZ","TX","NY","MA","CA","NJ")
state <- c("AZ","VT")
state %in% statevec ## TRUE FALSE
agevec <- c(16, 24, 45, 54, 67,74, 78, 79, 85)
age <- c(34,45)
age %in% agevec ## FALSE TRUE

编辑:正在处理更新的问题。

从 @NickCox 的链接复制:

inlist(z,a,b,...)
Domain: all reals or all strings
Range: 0 or 1
Description: returns 1 if z is a member of the remaining arguments;
otherwise, returns 0. All arguments must be reals
or all must be strings. The number of arguments is
between 2 and 255 for reals and between 2 and 10 for
strings.

但是,我不太确定这与原来的问题是否相符。我不太了解 Stata,不知道 z可以是向量,也可以不是向量:听起来不是那样,在这种情况下,原来的问题(将 z=state 视为向量)没有意义。如果我们认为它可以是一个向量,那么答案将是 as.numeric(state %in% statevec) ——我认为。

编辑:Ananda 更新

使用更新的数据,这是一种方法,再次使用 %in% :

data <- data.frame(age=0:10)
within(data, {
m <- as.numeric(!age %in% c(1, 7, 9))
})
age m
1 0 1
2 1 0
3 2 1
4 3 1
5 4 1
6 5 1
7 6 1
8 7 0
9 8 1
10 9 0
11 10 1

这与您的预期输出相匹配,使用 ! (不)颠倒 %in% 的含义。这似乎与我的思考方式有点倒退(通常,0=FALSE“不在列表中”和1=TRUE“在列表中”)和我对Stata的阅读定义,但如果这是你想要的......

或者可以使用ifelse为了获得更多潜在的灵 active (即 0/1 以外的值):替换 within(data, { m <- ifelse(age %in% c(1, 7, 9),0,1)})在上面的代码中。

关于r - R 中 Stata 函数 inlist() 的等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com