я представлю два [вероятные] очень хилых проблемы за отличный обзор.
Проблема № 1
У меня есть относительно аккуратный DF (DAT) с тусклыми 10299 х 563. 563 переменных, общие для обоих наборов данных, которые создали [] DAT являются 'субъект' (числовое), 'label' (числовое), 3: 563 (имена переменных из текстового файла). Наблюдения 1: 2947 взяты из «тестового» набора данных, тогда как наблюдения 2948: 10299 взяты из набора данных «обучения».
Я хотел бы, чтобы вставить столбец (заголовок = «типа») в Даты, что в основном строки 1: 2947 состоят из строки теста и строки 2948: 10299 строк поезд что способ, которым я могу группу позже по набору данных или другим аналогичным агрегатным функциям в dplyr/tidyr.
Я создал тест DF (testdf = 1: 10299: тусклый (testdf) = 102499 х 1), а затем:
testdat[1:2947 , "type"] <- c("test")
testdat[2948:10299, "type"] <- c("train")
> head(ds, 2);tail(ds, 2)
X1.10299 type
1 1 test
2 2 test
X1.10299 type
10298 10298 train
10299 10299 train
Так что я действительно не нравится, что сейчас колонна X1 0,10299.
Вопросы:
- есть лучший и более целесообразный способ создать столбец, который имеет то, что я ищу на основании моего случая использования выше?
- Что такое хороший способ вставить этот столбец в 'dat', чтобы я мог использовать его позже для группировки с dplyr?
Проблема № 2
Как я прибыл в моем [почти] кругленьком ФРЕ (Даты) сверху было два взять DFS (тест и поезд) вид тусклый (2947 х 563 и 7352 x 563) соответственно, и rbinding их вместе.
Я подтверждаю, что все мои имена переменных присутствуют после связывания усилий что-то вроде этого:
test.names <- names(test)
train.names <- names(train)
identical(test.names, train.names)
> TRUE
Что интересно и главной задачей является то, что если я пытаюсь использовать bind_rows функцию от «dplyr» для выполнения того же связывающего упражнения:
dat <- bind_rows(test, train)
Он возвращает dataframe, который, видимо, держит мой все мои наблюдения (х: 10299), но теперь моя переменная счетчика уменьшается от 563 до 470!
Вопрос:
- Кто-нибудь знает, почему мои переменные быть нарезанной?
- Это лучший способ совместить два в глубину той же структуры для последующего нарезания/перетасовки с dplyr/
tidyr?
Благодарим вас за внимание и внимание к этим вопросам.
Образец тест/поезд ДФСА для обзора (левое большинство числовых являются Д.Ф. индексами):
тест ф.р. тест [1:10, 1: 5]
subject labels tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z
1 2 5 0.2571778 -0.02328523 -0.01465376
2 2 5 0.2860267 -0.01316336 -0.11908252
3 2 5 0.2754848 -0.02605042 -0.11815167
4 2 5 0.2702982 -0.03261387 -0.11752018
5 2 5 0.2748330 -0.02784779 -0.12952716
6 2 5 0.2792199 -0.01862040 -0.11390197
7 2 5 0.2797459 -0.01827103 -0.10399988
8 2 5 0.2746005 -0.02503513 -0.11683085
9 2 5 0.2725287 -0.02095401 -0.11447249
10 2 5 0.2757457 -0.01037199 -0.09977589
поезда df поезд [1:10, 1: 5]
subject label tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z
1 1 5 0.2885845 -0.020294171 -0.1329051
2 1 5 0.2784188 -0.016410568 -0.1235202
3 1 5 0.2796531 -0.019467156 -0.1134617
4 1 5 0.2791739 -0.026200646 -0.1232826
5 1 5 0.2766288 -0.016569655 -0.1153619
6 1 5 0.2771988 -0.010097850 -0.1051373
7 1 5 0.2794539 -0.019640776 -0.1100221
8 1 5 0.2774325 -0.030488303 -0.1253604
9 1 5 0.2772934 -0.021750698 -0.1207508
10 1 5 0.2805857 -0.009960298 -0.1060652
Фактический код (игнорируйте вызовы функций/выполняю большую часть тестирования через консоль).
[http://archive.ics.uci.edu/ml/machine-learning-databases/00240/]The набор данных, который я использую с этим кодом. 1
run_analysis <- function() {
#Vars available for use throughout the function that should be preserved
vars <- read.table("features.txt", header = FALSE, sep = "")
lookup_table <- data.frame(activitynum = c(1,2,3,4,5,6),
activity_label = c("walking", "walking_up",
"walking_down", "sitting",
"standing", "laying"))
test <- test_read_process(vars, lookup_table)
train <- train_read_process(vars, lookup_table)
}
test_read_process <- function(vars, lookup_table) {
#read in the three documents for cbinding later
test.sub <- read.table("test/subject_test.txt", header = FALSE)
test.labels <- read.table("test/y_test.txt", header = FALSE)
test.obs <- read.table("test/X_test.txt", header = FALSE, sep = "")
#cbind the cols together and set remaining colNames to var names in vars
test.dat <- cbind(test.sub, test.labels, test.obs)
colnames(test.dat) <- c("subject", "labels", as.character(vars[,2]))
#Use lookup_table to set the "test_labels" string values that correspond
#to their integer IDs
#test.lookup <- merge(test, lookup_table, by.x = "labels",
# by.y ="activitynum", all.x = T)
#Remove temporary symbols from globalEnv/memory
rm(test.sub, test.labels, test.obs)
#return
return(test.dat)
}
train_read_process <- function(vars, lookup_table) {
#read in the three documents for cbinding
train.sub <- read.table("train/subject_train.txt", header = FALSE)
train.labels <- read.table("train/y_train.txt", header = FALSE)
train.obs <- read.table("train/X_train.txt", header = FALSE, sep = "")
#cbind the cols together and set remaining colNames to var names in vars
train.dat <- cbind(train.sub, train.labels, train.obs)
colnames(train.dat) <- c("subject", "label", as.character(vars[,2]))
#Clean up temporary symbols from globalEnv/memory
rm(train.sub, train.labels, train.obs, vars)
return(train.dat)
}
Привет Зак, это, безусловно, интересно, ничего о том, что вы делаете выскакивает для меня как нечто, что создавало бы то, что вы видите. Можете ли вы дублировать поведение с подмножеством данных, которые вы могли бы воспроизвести здесь (меньшее количество строк/столбцов, которые могут быть 'dput()' или считаны? –
@ ForrestR.Stevens Обновлен вопрос с воспроизводимым [надеюсь,] набором данных. – Zach