#r #dplyr #tidyr
Вопрос:
У меня есть таблица с таксономией [chr] и данными о наличии/отсутствии [num] для выборки. Я импортировал его из файла .tsv. Это таблица с x наблюдениями и y переменными. Я должен преобразовать его в таблицу только с целыми числами в качестве записей.
Я пробовал lapply(data,as.integer)
, это работает для столбцов с данными о наличии/отсутствии, но в столбце таксономия мои данные разделились, и вместо вида у меня NA. Более того, у меня больше нет таблицы, а есть список с переменными y.
Есть ли другой способ, которым я могу это сделать?
таксономия | сайт 1 | сайт 2 | сайт 3 | сайт 4 |
---|---|---|---|---|
разновидности1 | 0 | 1 | 0 | 0 |
разновидности2 | 1 | 0 | 0 | 0 |
разновидности3 | 0 | 1 | 1 | 1 |
После lapply(data,as.integer)
того, как это выглядит так:
таксономия | сайт 1 | сайт 2 | сайт 3 | сайт 4 |
---|---|---|---|---|
NA | 0 | 1 | 0 | 0 |
NA | 1 | 0 | 0 | 0 |
NA | 0 | 1 | 1 | 1 |
Комментарии:
1.
lapply(data[,2:5],as.integer)
2. Спасибо за ваш комментарий, но мне нужно, чтобы эта первая колонка была в таблице.
Ответ №1:
Используя dplyr
, вы можете это сделать…
library(dplyr) # everything except the first column mtcars %gt;% mutate(across(-1, as.integer)) # everything except "taxonomy" mtcars %gt;% mutate(across(-taxonomy, as.integer)) # everything that starts with "site" data %gt;% mutate(across(starts_with("site"), as.integer))
Я бы задался вопросом, что содержится в ваших данных, чтобы они читались как символы, хотя в первую очередь. Я предполагаю, что есть какой-то персонаж «НА». Если вы используете read.table()
, вы можете настроить аргумент na.strings = "NA"
так, чтобы он считывался в качестве целого числа в первую очередь.
Комментарии:
1. Спасибо вам за ваш вклад.
Ответ №2:
Если мы хотим использовать базу R, мы можем использовать lapply и назначить выходные данные только подмножеству данных:
data[-1]lt;-lapply(data[-1], as.integer) data
Ответ №3:
Я думаю, что теперь я знаю, в чем проблема — мне нужно сделать этот первый столбец с именами таксономий в качестве меток в моей таблице.
Чтение данных с read.csv('data.csv', header = TRUE, row.names = 1)
помощью действительно помогло.