Вопрос:

Создание двух наборов данных из набора данных для повторного использования

r split dataset subset

53 просмотра

1 ответ

26 Репутация автора

Я знаю, что есть и другие примеры, но, честно говоря, ни один из них не может ответить на мой вопрос, поэтому я публикую этот. У меня есть этот набор данных, и я хочу разделить этот набор данных на основе переменной (столбец). Вот ссылка на набор данных: https://drive.google.com/file/d/0B4Mldbnr1-avMDIxYmZLSnRfUDA/view?usp=sharing

Вот что я сделал до сих пор:

# Reading data set
power <- read.csv("data set 6.csv", na.strings="",stringsAsFactors = FALSE)

# SUBSETTING
Area <- as.numeric(power$Area)
City <- as.factor(power$City)
P.Winter <- as.numeric(power$P.Winter)
P.Summer <- as.numeric(power$P.Summer)


#Part 1 - Data Cleaning and Transformation
str(power)
which(power$City == "Ackland ")
which(power$City == "Auckland ")
power$City[power$City == "Ackland "] <- "Auckland"
power$City <- trimws(power$City) # remove white spaces from all of them
power <- power[!(power$City =="Sydney"), ] # removing rows that contain "Sydney" 
power <- power[!(power$Area =="-25"), ] # clear negative area
power <- power[!(power$P.Winter =="18000"), ]

#Adding new variable and calculates average power consumption
power$P.Annual <- as.numeric(power$P.Winter + power$P.Summer)/2

#To split dataset into two parts based on "City"
library(data.table)
Auckland <- data.table(power, power$City)
Auckland[, plot(P.Winter,P.Summer, P.Annual), by = list(City)]

Но этот код приводит к ошибке, не давая то, что я ожидал:

Выход:

Auckland <- data.table(power, power$City)
> Auckland[, plot("Auckland"), by = list(City)]
Error in plot.window(...) : need finite 'ylim' values
In addition: Warning messages:
1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

Спасибо за помощь

Автор: Nelson Источник Размещён: 09.11.2017 12:04

Ответы (1)


2 плюса

432 Репутация автора

Решение

Если я правильно понимаю ваш вопрос, вам просто нужно использовать функцию split, она разделит ваш data.frame на список, основанный на City:

#To split dataset into two parts based on "City"
library(data.table)
splittedPower <- split(power, power$City)
str(splittedPower$Auckland)

Выход будет:

'data.frame':   248 obs. of  5 variables:
 $ Area    : num  144 177 269 209 124 ...
 $ City    : chr  "Auckland" "Auckland" "Auckland" "Auckland" ...
 $ P.Winter: num  1685 1927 2027 1938 1580 ...
 $ P.Summer: num  1194 1487 1737 -158 1148 ...
 $ P.Annual: num  1440 1707 1882 890 1364 ...
Автор: You-leee Размещён: 09.11.2017 02:00
Вопросы из категории :
32x32