R中的Stata函数inlist()的等价物是什么?
Stata允许我们引用变量的实数或字符串值。我想知道R中的Stata函数inlist()的等价物是什么?,r,command,stata,R,Command,Stata,Stata允许我们引用变量的实数或字符串值。我想知道R是否有这样的功能 示例: 我想从变量state中选择八个状态(您可以将其视为state列,在任何数据帧中state取50个字符串值(美国) 我想从变量age中选择九个年龄值(您可以认为这是任何数据帧中age列,其中age取0到90的数值) 问题: age<-c(0:10) # for this problem age takes values from 0 to 10 only data<-as.data.frame(age) #
R
是否有这样的功能
示例:
我想从变量state
中选择八个状态(您可以将其视为state
列,在任何数据帧中state
取50个字符串值(美国)
我想从变量age
中选择九个年龄值(您可以认为这是任何数据帧中age
列,其中age
取0到90的数值)
问题:
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
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
然而,我不太确定这与最初的问题是否相符。我对Stata的了解还不足以知道z
是否可以是向量:听起来不是这样,在这种情况下,原始问题(将z=state
视为向量)没有意义。如果我们认为它可以是一个向量,那么答案将是<代码> as。数字(状态%%STATEVEC)< /代码>——我想。
编辑:由Ananda更新
使用更新的数据,这里有一种方法,再次使用%
%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
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
数据我相信您可能正在查找match()
或%
中的%,但我不太熟悉Stata的inlist
函数。如果您定义了state
和age
并显示了预期的输出,这会有所帮助…@Ananda和@Ben:很抱歉没有更明确。我现在编辑了这个问题,希望它更清楚。是一个更简洁和直接的信息来源。在Stata中,inlist()
是一个函数,而不是命令。@Ananda:我已经更新了这个问题。你能检查一下吗?@BenBolker,很抱歉编辑太乱了!无法跟踪对问题的所有编辑!;)@Ben,这是一个标量函数,可能有一个很好的理由:我不知道如何解释多对多匹配。inlist(c(1,7,9),1)
是否应该计算为TRUE?inlist(c(1,7,9),c(9,7,1))
是否应计算为TRUE?是否只应inlist(c(1,7,9)、c(1,7,9)、c(2,3,5))
计算为true?当在变量上下文中遇到inlist()
时(回想一下,Stata仅适用于一个称为data的矩形对象),它会针对数据集中的每个观察值进行计算。好的,R在%
运算符中使用了其%的合理定义(如果可能不是您想要的,也可能不是完全等同于inline
):c(1,7,9)%in%1
给出TRUE-FALSE
<%c(9,7,1)中的code>c(1,7,9)
给出TRUE
(第一个操作数中的所有三个元素都与第二个操作数的元素匹配)。我不知道有>2个参数的版本(%in%
只允许两个参数);我可能会将R定义为%union(b,c,d,…)中的a%
@AnandaMahto:据我所知,as.numeric生成0或1。但是,ifelse也允许其他值,例如10或50。我想继续使用ifelse:in(data,{m
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