R 3.0.3:x[j]中的错误:仅0';s可以与负下标混合

R 3.0.3:x[j]中的错误:仅0';s可以与负下标混合,r,R,首先,介绍一些背景知识:我已经能够创建一个初始数据帧和一系列文本文件。这些文件描述了一个实验,在该实验中,三星Galaxy智能手机以各种方式测量了30名受试者的6种身体动作。这七个.txt文件是: xtest——30%实验对象的观察指标; testsubject-此30%的受试者ID号; ytest——这30%的人采取的不同行动; xtrain——其他70%实验对象的观察指标; 培训主题-其他70%的主题ID号; ytrain——由其他70%的人执行的独特行动; 活动-一个由561项来自三星手机

首先,介绍一些背景知识:我已经能够创建一个初始数据帧和一系列文本文件。这些文件描述了一个实验,在该实验中,三星Galaxy智能手机以各种方式测量了30名受试者的6种身体动作。这七个.txt文件是:

xtest——30%实验对象的观察指标; testsubject-此30%的受试者ID号; ytest——这30%的人采取的不同行动; xtrain——其他70%实验对象的观察指标; 培训主题-其他70%的主题ID号; ytrain——由其他70%的人执行的独特行动; 活动-一个由561项来自三星手机的汇总统计数据组成的向量 测量

从这些7.txt文件中,我创建了一个包含10299行和563列的新数据框。正如下面的代码所描述的,这个过程要求我为测试和训练组找到y、subject和x文件。然后,我对测试和训练组进行rbind,并从activities字符向量中提供列名。接下来,我使用grep()函数对该数据帧进行子集划分,以仅包括计算观察值的平均值和标准偏差的列(这些列的名称中有“mean”和“std”)。此时,我有一个10299行79列的数据帧。然后,我将y和subject value列重新绑定回这个子集数据帧(因为我使用grep函数将它们过滤掉),它返回一个包含10299行和81列的数据帧

 ## Read in data files and store in list
setwd("~/Desktop/UCI HAR Dataset/test_train")
test_files <- list.files("~/Desktop/UCI HAR Dataset/test_train")
data_list <- lapply(test_files, read.table, sep = "")

## Extract data files from list and save as data frames or vectors
features_df <- data.frame(data_list[1])
features <- as.character(features_df[,2])
xtest_data <- data.frame(data_list[4])
subject_test_data <- unlist(data_list[2])
ytest_data <- unlist(data_list[6])
subject_train_data <- unlist(data_list[3])
xtrain_data <- data.frame(data_list[5])
ytrain_data <- unlist(data_list[7])

## Create new data frame 
test_data <- cbind(ytest_data, subject_test_data, xtest_data)
train_data <- cbind(ytrain_data, subject_train_data, xtrain_data)
samsung_data <- rbind(test_data, train_data)
names(samsung_data) <- c("activity", "subject", features)

## Create subset of samsung_data data frame
std_data <- samsung_data[,grep("std",colnames(samsung_data))]
mean_data <- samsung_data[,grep("mean",colnames(samsung_data))]
ysubject_data <- data.frame(rbind(cbind(ytest_data, subject_test_data), 
                       cbind(ytrain_data, subject_train_data)))
mean_std_data <- cbind(ysubject_data, mean_data, std_data)

## Subset new data frame
mean_std_data[mean_std_data$subject == 1, mean_std_data$"tBodyGyroJerk-mean()-Y163"]
通过搜索stackoverflow和google,我认为这告诉我的是,行现在既有负索引,也有正索引,所以不能被子集


我想知道是否有人知道如何解决这个问题。我曾考虑尝试将数据帧的索引重新编号作为一种可能的解决方案,但我不确定我能做到这一点。我有一种感觉,这个问题更为根本,必须与我对原始数据框进行细分,然后重新附加“主题”和“活动”列的方式有关。任何提示/建议都将不胜感激。

平均值是多少?R将其解释为列名称列表(如果是字符)或列索引列表(如果是数字)。如果这是要提取的列的名称,则

mean_std_data[mean_std_data$subject == 1, "tBodyGyroJerk-mean()-Y163"]
这就足够了。尽管我很惊讶这是您使用的
read.table
的真实列名。我早就料到了

make.names("tBodyGyroJerk-mean()-Y163")
# [1] "tBodyGyroJerk.mean...Y163"

错误将发生在特定行(您似乎没有提供)中,并且始终意味着您试图使用包含正值和负值的索引向量进行子集。解决办法是找出你在哪里做的,而不是那样做。这就是我所想的:负指数和正指数。我现在添加了产生错误的特定代码行。这最后一行是否提供了更多关于我错在哪里的见解;只是
mean\u std\u data$“tBodyGyroJerk-mean()-Y163”
在我看来像是胡言乱语。那到底应该做什么?…你只是想选择一列吗?因为
“tBodyGyroJerk-mean()-Y163”
是一个非常奇怪的列名,如果要选择它,只需传递字符串,而不带
$
前缀。同意-需要清理列。但实际上,如果你对实验有更多的了解,那么“BodyGyroJerk平均值”部分是有意义的。
make.names("tBodyGyroJerk-mean()-Y163")
# [1] "tBodyGyroJerk.mean...Y163"