присвоение одинакового значения всем строкам в фрейме данных - PullRequest
2 голосов
/ 18 марта 2019

Мне нужно присвоить некоторые значения для строк в моем наборе данных.Мой фрейм данных выглядит следующим образом:

Network1 Network2
A        A
A        C
B        D

Я бы хотел, чтобы все значения были согласованными, поэтому, если A = 1 в сети 1, это должно быть 1 также в сети 2

Я попробовал следующее:

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 ]

3 голосов
/ 18 марта 2019

unlist, преобразовать его в factor, затем numeric и вернуться к исходному виду

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

df
#  Network1 Network2
#1        1        1
#2        1        3
#3        2        4
2 голосов
/ 18 марта 2019

Можно также попробовать:

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

Это будет применять логику ко всем столбцам одновременно.

2 голосов
/ 18 марта 2019

Вы можете сначала сохранить все уровни фрейма данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...