我需要为数据集中的字符串分配一些值。我的数据框看起来像:
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
感谢您的帮助。
答案 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
这将立即将逻辑应用于所有列。