Изменение значений в кадре данных, повторяющихся по всем строкам и нескольким столбцам

Я не вижу проблемы для Pascal?

Этот неверный отступ.

if a then
  if b then
     x = 1;
  else
     y = 1;

Удаление полуколоны после x = 1 сделает ее правильной с отступом.

Этот правильный отступ

if a then
  if b then
     x = 1;
else
  y = 1;
0
задан Ronak Shah 18 January 2019 в 14:21
поделиться

3 ответа

Однострочник может быть,

data[rowSums(data[-1]) > 0,] <- replace(data[rowSums(data[-1]) > 0,], 
                                        data[rowSums(data[-1]) > 0,] == 0, 
                                        NA)
data
#  id V1 V2 V3
#1  A  1 NA  1
#2  B  0  0  0
#3  C NA NA  1

Чтобы избежать повторного вычисления одного и того же выражения, мы можем сначала определить его, т.е.

v1 <- rowSums(data[-1]) > 0
data[v1,] <- replace(data[v1,], 
                     data[v1,] == 0, 
                     NA)
0
ответ дан Sotos 18 January 2019 в 14:21
поделиться

Это легко с dplyr, если вы хотите изменить значения для столбцов V1 и V2 на основе значений в V3. Мы можем указать столбцы, для которых мы хотим изменить значения, в mutate_at, а в аргументе funs указать условие, для которого вы хотите изменить значения.

library(dplyr)

data %>% mutate_at(vars(V1:V2), funs(replace(., V3 == 1 & . == 0, NA)))

#  id V1 V2 V3
#1  A  1 NA  1
#2  B  0  0  0
#3  C NA NA  1
0
ответ дан Ronak Shah 18 January 2019 в 14:21
поделиться

Мы можем сделать это в base R, создав логический вектор с rowSums, а затем обновить числовые столбцы на основе этого индекса

i1 <- rowSums(data[-1] == 1) > 0
data[-1][i1,] <- NA^ !data[-1][i1,]
data
#  id V1 V2 V3
#1  A  1 NA  1
#2  B  0  0  0
#3  C NA NA  1

Если индекс должен быть основан в одном столбце, скажем «V3», измените «i1» на

i1 <- data$V3 == 1

и обновите другие числовые столбцы после подстановки строк в «i1», создайте логическую матрицу с отрицанием (! - возвращает TRUE для 0 значений и все остальные FALSE). Затем, используя NA^ на логической матрице, возвращает NA для TRUE и 1 для других значений. Поскольку существуют только двоичные значения, это можно обновить

data[i1, 2:3] <- NA^!data[i1, 2:3]
0
ответ дан akrun 18 January 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: