我有两个dataframes
如下:
df1 <- read.table(text = "Source Signal Target
A no B
B yes C
C no D
D no A
E yes F
F yes G
G no E", header = T)
df2 <- read.table(text = "Source Signal Target
A no B
B yes C
E yes F
F yes G", header = T)
我合并了df1
and df2
:interactions <- merge(df1, df2)
然后我试图match
每个Source
and Target
with df3
。
df3 <- read.table(text = "Symbol ID Name
A 11 LetterA
C 13 LetterC
D 14 LetterD
F 16 LetterF
G 17 LetterG", header = T)
我得到以下输出:
Source
Symbol ID Name
1 A 11 LetterA
NA <NA> NA <NA>
NA.1 <NA> NA <NA>
4 F 16 LetterF
所以我想replace
在NA
在显示的“原始”输入df2
和如下得到的输出:
Symbol ID Name
A 11 LetterA
B NA B
E NA E
F 16 LetterF
我试过:
Source <- df3[match(interactions$Source, df3$Symbol),-4]
my.na <- is.na(Source$Name)
Source$Name[my.na] <- interactions$Source[my.na]
Source$Symbol[my.na] <- interactions$Source[my.na]
但我得到的是数字而不是字符。有什么我想念的吗?是否可以在不使用任何库的情况下替换合并值?
您的问题是,默认情况下,read.table
将字符串转换为存储为整数的因子,这些整数映射到查找表。因此,当您尝试将它们插入 时Source
,它实际插入的是该因子的整数值。您可以通过将参数添加stringsAsFactors = F
到您的read.table
调用中来解决此问题,以便将那里的数据保留为字符串。现在,当您使用 match 将值插入Source
其中时,将插入字符串,而不是因子数。
如果您仍然遇到问题,您可能还需要将变量转换Source
为字符而不是因子。你可以这样做:
# Base R:
Source$Symbol <- as.character(Source$Symbol)
Source$Name <- as.character(Source$Name)
# Dplyr:
library(dplyr)
Source <- Source %>%
mutate_if(is.factor, as.character)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句