为数据框中的所有字符串分配相同的值

时间:2019-03-18 12:08:23

标签: r string dataframe

我需要为数据集中的字符串分配一些值。我的数据框看起来像:

Network1 Network2
A        A
A        C
B        D

我希望所有值都保持一致,因此,如果网络1中的A = 1,那么网络2中的A也应为1

我尝试了以下操作:

data$network1<-as.numeric(as.factor(data$network1))
data$network2<-as.numeric(as.factor(data$network2))

但是,除少数情况外,附加的值不匹配。

有什么办法可以同时对两个列进行全局操作,以使值保持一致?我希望期望的输出是:

Network1 network2
1                1
1                3
2                4

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

unlist,将其转换为factor,然后转换为numeric并返回原始格式

df[] <- as.numeric(factor(unlist(df)))

df
#  Network1 Network2
#1        1        1
#2        1        3
#3        2        4

答案 1 :(得分:2)

您可以先保存数据框的所有级别:

df <- data.frame(Network1 = c("A", "A", "B"), Network2 = c("A", "C", "D"))

lvls <- unique(unlist(df))

df$Network1 <- as.numeric(factor(df$Network1, levels = lvls))
df$Network2 <- as.numeric(factor(df$Network2, levels = lvls))
df

>   Network1 Network2
 1        1        1
 2        1        3
 3        2        4

答案 2 :(得分:2)

也可以尝试:

strings <- unique(unlist(df))
matchdf <- data.frame(strings, as.numeric(as.factor(strings)))

as.data.frame(sapply(df, function(x) match(x, matchdf$strings)))

输出:

  Network1 Network2
1        1        1
2        1        3
3        2        4

这将立即将逻辑应用于所有列。