#r
#r
Вопрос:
У меня есть data.frame, который выглядит следующим образом:
Я хотел бы знать, есть ли простой способ удалить значения для всех столбцов, кроме ID, для первых двух строк (заменить его на «»)? Как можно больше способов. Большое спасибо.
Образцы данных могут быть построены с использованием кодов :
df<-structure(list(ID = structure(c("C5-102", "C5-102", "C5-102",
"C5-102", "C5-102", "C5-102", "C5-102", "C5-102", "C5-102", "C5-102",
"C1-103", "C1-103", "C1-103", "C1-103", "C1-103", "C1-103", "C1-103",
"C1-103", "C8-104", "C8-104", "C8-104", "C8-104", "C8-104", "C8-104"
), label = "Unique Subject Identifier", format.sas = "$"), score = c(73.8,
100, 147.6, 73.8, 147.6, 73.8, 147.6, 1600, 1600, 1600, 64.5,
129, 64.5, 129, 64.5, 129, 4302, 86, 62.7, 125.4, 62.7, 125.4,
62.7, 125.4), test = c("A", "M", "A", "A", "A", "A", "A", "C",
"C", "C", "A", "A", "A", "A", "A", "A", "C", "M", "A", "A", "A",
"A", "A", "A"), Time = c("2016-03-16T10:22", "2016-03-25T01:23",
"2016-03-16T11:10", "2016-03-17T12:12", "2016-03-17T12:52", "2016-03-18T12:05",
"2016-03-18T12:53", "2016-03-21T11:00", "2016-03-22T11:55", "2016-03-23T12:34",
"2016-08-09T14:13", "2016-08-09T14:49", "2016-08-10T13:30", "2016-08-10T14:30",
"2016-08-12T13:35", "2016-08-12T14:20", "2016-08-14T13:00", "2016-08-18T01:00",
"2016-08-11T14:38", "2016-08-11T15:42", "2016-08-12T14:22", "2016-08-12T15:26",
"2016-08-13T14:31", "2016-08-13T15:45")), row.names = c(NA, -24L
), label = "EX ", class = c("tbl_df",
"tbl", "data.frame"))
Ответ №1:
Возможно, было бы лучше заменить на NA
вместо ""
, поскольку ""
это символьная строка, и она изменяет значение type
столбца, в то время NA
как является отсутствующим значением и не изменяет тип
df[1:2, -1] <- NA
В приведенном выше коде мы указываем индекс строки / столбца, разделенный ,
символом, т.е. мы выбираем строки 1 и 2 и столбцы, отличные от первого. После выбора выполните присваивание ( <-
) для NA
Приведенный выше код является кратким, простым и является base R
вариантом
Другой вариант — replace
with mutate/across
, и если нужно создать новый столбец with unite
, то используйте na.rm = TRUE
(как по умолчанию FALSE
)
library(dplyr)
library(tidyr)
df %>%
mutate(across(-1, ~ replace(., 1:2, NA))) %>%
unite(score, test, Time, na.rm = TRUE)
Комментарии:
1. Мне нужно будет использовать sth like
unite("TotalScore","Score","Score1",sep = " ")
позже. после того, как я создам другой набор данных. БудетNA
отображаться как NA или «» в этом случае?2. @Statq, вы можете использовать
na.rm = TRUE
вunite
, поскольку использованиеunite(data, col, ..., sep = "_", remove = TRUE, na.rm = FALSE)