Как я могу удалить строку, содержащую определенную строку в R? - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в использовании R. Я использую набор данных, и пропущенные значения были заменены на "?"прежде чем я получу данные.Я ищу способ удалить строки, которые содержат это.Это не относится только к одной строке, это во всех них.

Я пытался Удалить строки, содержащие определенные строки в R , но это не работает для меня.Я включил свой код ниже.

library(randomForest)
heart <- read.csv(url('http://archive.ics.uci.edu/ml/machine-learning-databases/echocardiogram/echocardiogram.data'))
names <- names(heart)
nrow(heart)
ncol(heart)
names(heart)

colnames(heart)[colnames(heart)=="X11"] <- "survival"
colnames(heart)[colnames(heart)=="X0"] <- "alive"
colnames(heart)[colnames(heart)=="X71"] <- "attackAge"
colnames(heart)[colnames(heart)=="X0.1"] <- "pericardialEffusion"
colnames(heart)[colnames(heart)=="X0.260"] <- "fractionalShortening"
colnames(heart)[colnames(heart)=="X9"] <- "epss"
colnames(heart)[colnames(heart)=="X4.600"] <- "lvdd"
colnames(heart)[colnames(heart)=="X14"] <- "wallMotionScore"
colnames(heart)[colnames(heart)=="X1"] <- "wallMotionIndex"
colnames(heart)[colnames(heart)=="X1.1"] <- "mult"
colnames(heart)[colnames(heart)=="name"] <- "patientName"
colnames(heart)[colnames(heart)=="X1.2"] <- "group"
colnames(heart)[colnames(heart)=="X0.2"] <- "aliveAfterYear"
names(heart)

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я думаю, что это может делать то, что вы хотите.

# Do not forget to set stringsAsFactors as false to the read.csv 
# as to make string comparison efficient
heart <- read.csv(url('http://archive.ics.uci.edu/ml/machine-learning-databases/echocardiogram/echocardiogram.data'),stringsAsFactors = F)

# Simpler way to assign column names to the dataframe
colnames(heart) <- c("survival", "alive", "attackAge", "pericardialEffusion", 
                     "fractionalShortening", "epss", "lvdd", "wallMotionScore", 
                     "wallMotionIndex", "mult", "patientName", 
                     "group", "aliveAfterYear")


# You can traverse a dataframe as a matrix using the row and column index 
# as coordinates 

for(r in 1:nrow(heart)){
   for(c in 1:ncol(heart)){
      # For this particular cell you do a comparison 
      # substituting the ? with NA which is the default missing value
      # in R 
      heart[r,c] <- ifelse(heart[r,c]=="?",NA,heart[r,c])
   }
}

# omit the NA rows 
heart <- na.omit(heart)
0 голосов
/ 23 ноября 2018

Некоторые библиотеки поддерживают чтение CSV-файлов и указание строк для чтения как пропущенных значений.Я чаще всего использую библиотеку readr.Тогда вы можете просто использовать na.omit и аналогичные функции.

library(readr)
library(dplyr)

heart  <- read_csv(
  'http://archive.ics.uci.edu/ml/machine-learning-databases/echocardiogram/echocardiogram.data',
  na=c("", "?")
)


colnames(heart) <- recode(
  colnames(heart),
  "X11" = "survival",
  "X0" = "alive",
  "X71" = "attackAge",
  "X0.1" = "pericardialEffusion",
  "X0.260" = "fractionalShortening",
  "X9" = "epss",
  "X4.600" = "lvdd",
  "X14" = "wallMotionScore",
  "X1" = "wallMotionIndex",
  "X1.1" = "mult",
  "name" = "patientName",
  "X1.2" = "group",
  "X0.2" = "aliveAfterYear"
  )

heart

heart <- na.omit(heart)

(Также вы можете сэкономить некоторую печать с помощью функции recode из пакета dplyr, но ваше решение для переименования столбцов работает какхороший.)

0 голосов
/ 23 ноября 2018
library(randomForest)
heart <- read.csv(url('http://archive.ics.uci.edu/ml/machine-learning-databases/echocardiogram/echocardiogram.data'),na.strings = "?")
names <- names(heart)
nrow(heart)
ncol(heart)
names(heart)

colnames(heart)[colnames(heart)=="X11"] <- "survival"
colnames(heart)[colnames(heart)=="X0"] <- "alive"
colnames(heart)[colnames(heart)=="X71"] <- "attackAge"
colnames(heart)[colnames(heart)=="X0.1"] <- "pericardialEffusion"
colnames(heart)[colnames(heart)=="X0.260"] <- "fractionalShortening"
colnames(heart)[colnames(heart)=="X9"] <- "epss"
colnames(heart)[colnames(heart)=="X4.600"] <- "lvdd"
colnames(heart)[colnames(heart)=="X14"] <- "wallMotionScore"
colnames(heart)[colnames(heart)=="X1"] <- "wallMotionIndex"
colnames(heart)[colnames(heart)=="X1.1"] <- "mult"
colnames(heart)[colnames(heart)=="name"] <- "patientName"
colnames(heart)[colnames(heart)=="X1.2"] <- "group"
colnames(heart)[colnames(heart)=="X0.2"] <- "aliveAfterYear"
names(heart)


heart1 <- na.omit(heart)

при импорте файла вы можете указать na.string как?и позже с помощью na.omit вы можете удалить все?или NA строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...