Как создать таблицу только с целыми числами

#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) помощью действительно помогло.