Как удалить значение определенных столбцов в определенных строках

#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)