Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的Stata函数inlist()的等价物是什么?_R_Command_Stata - Fatal编程技术网

R中的Stata函数inlist()的等价物是什么?

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) #

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) # 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