Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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中实现此计数?_R_Dataframe - Fatal编程技术网

如何在r中实现此计数?

如何在r中实现此计数?,r,dataframe,R,Dataframe,我的两个数据帧: df1 Col1 A B C df2 Col1 A D E F 我想在df1中添加第二列Col2,如果Col1中的各个值也在df2的Col1中,那么该列中的每个值都是1。因此,df1将如下所示: df1 Col1 Col2 A 1 B 0 C 0 谢谢 df3是最终输出 library(dplyr) df

我的两个数据帧:

 df1
    Col1 
     A
     B
     C

 df2
    Col1 
     A  
     D  
     E  
     F  
我想在df1中添加第二列Col2,如果Col1中的各个值也在df2的Col1中,那么该列中的每个值都是1。因此,df1将如下所示:

 df1
    Col1 Col2
     A    1
     B    0
     C    0

谢谢

df3是最终输出

library(dplyr)

df1 <- data_frame(Col1 = c("A", "B", "C"))
df2 <- data_frame(Col1 = c("A", "D", "E", "F"))

df3 <- df1 %>% mutate(Col2 = as.numeric(Col1 %in% df2$Col1)) 

df3
是最终输出

library(dplyr)

df1 <- data_frame(Col1 = c("A", "B", "C"))
df2 <- data_frame(Col1 = c("A", "D", "E", "F"))

df3 <- df1 %>% mutate(Col2 = as.numeric(Col1 %in% df2$Col1)) 
将col2添加到df2

df2$Col2 <- 1
编辑:@ycw使用
作为.numeric
和%中的
%。我喜欢他的答案,但我想我应该编辑我的答案,加入一个不使用dplyr的版本:

只需将Col2添加到df2即可

df2$Col2 <- 1
编辑:@ycw使用
作为.numeric
和%
中的
%。我喜欢他的答案,但我想我应该编辑我的答案,加入一个不使用dplyr的版本:


使用
data.table

第一个使用
%chin%
运算符:

库(data.table)
x=数据表(v=字母[1:3])
y=数据表(v=c(“A”、“D”、“E”、“F”))
x[,发现:=v%chin%y$v]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误
第二个基于合并行为:

库(data.table)
x=数据表(v=字母[1:3])
y=数据表(v=c(“A”、“D”、“E”、“F”))
y[,发现:=TRUE]
x[,found:=y[.SD,(.ifelse(is.na(found),FALSE,TRUE)),on=(v)]]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误

编辑:基于@frank comment,您可以在不使用
的情况下进行简化,如果没有其他
——这是一样的

x[,found:=y[.SD,!is.na(found),on=(v)]]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误

为了了解发生了什么,以下是我构建的内部代码:

x[,发现:=NULL]
y[x,on=(v)]
#>v发现
#>1:真的吗
#>2:B不适用
#>3:CNA

使用
数据表的两个选项

第一个使用
%chin%
运算符:

库(data.table)
x=数据表(v=字母[1:3])
y=数据表(v=c(“A”、“D”、“E”、“F”))
x[,发现:=v%chin%y$v]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误
第二个基于合并行为:

库(data.table)
x=数据表(v=字母[1:3])
y=数据表(v=c(“A”、“D”、“E”、“F”))
y[,发现:=TRUE]
x[,found:=y[.SD,(.ifelse(is.na(found),FALSE,TRUE)),on=(v)]]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误

编辑:基于@frank comment,您可以在不使用
的情况下进行简化,如果没有其他
——这是一样的

x[,found:=y[.SD,!is.na(found),on=(v)]]
x
#>v发现
#>1:真的吗
#>2:B错
#>3:C错误

为了了解发生了什么,以下是我构建的内部代码:

x[,发现:=NULL]
y[x,on=(v)]
#>v发现
#>1:真的吗
#>2:B不适用
#>3:CNA


没有dplyr的替代方案:
df1$Col2=as.numeric(df1$Col1%在%df2$Col1中)
出于某种原因,我得到了:库中的错误(dplyr):没有名为'dplyr'的包知道有什么问题吗?您是否已将dplyr安装为
install.packages('dplyr')
Nevermind,我使用了@Florian的答案并使用了cbind()把它粘回到df1上。谢谢@Florian@RaiderNAYSHUN也许您可以标记HarlandMason的答案,让其他人知道这个问题已经得到了回答。没有dplyr的替代方案:
df1$Col2=as.numeric(df1$Col1%in%df2$Col1)
出于某种原因,我得到了:库中的错误(dplyr):没有名为“dplyr”的软件包知道有什么问题吗?您是否已将dplyr安装为
install.packages('dplyr')
Nevermind,我使用@Florian的答案并使用cbind()将其粘贴到df1上。谢谢@Florian@也许你可以标记哈兰梅森的答案,让其他人知道这个问题已经得到了回答。很好的解决方案。感谢您为我的方法添加了基本的R解决方案。很好。另一个版本:
df1$found=!is.na(merge(df1,transform(df2,z=1),all.x=TRUE)$z)
。请注意,%
中的
%与此答案(允许合并多个列)相比具有限制性。这是一个不错的解决方案。感谢您为我的方法添加了基本的R解决方案。很好。另一个版本:
df1$found=!is.na(merge(df1,transform(df2,z=1),all.x=TRUE)$z)
。请注意,%
中的
%与此答案(允许合并多个列)相比具有限制性。这是一个好主意。仅供参考,
ifelse
通常不鼓励使用,因为在这种情况下,我想您可以使用
!而是.na(找到)
。是的,你是对的。我不知道我错过了。我更新了答案,这是个好主意。仅供参考,
ifelse
通常不鼓励使用,因为在这种情况下,我想您可以使用
!而是.na(找到)
。是的,你是对的。我不知道我错过了。我更新答案。
df3$Col2[which(is.na(df3$Col2))] <- 0
  Col1 Col2
1    A    1
2    B    0
3    C    0