Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用单[]和无逗号在R中对数据进行子集设置_R_List_Function_Subset - Fatal编程技术网

使用单[]和无逗号在R中对数据进行子集设置

使用单[]和无逗号在R中对数据进行子集设置,r,list,function,subset,R,List,Function,Subset,关于之前关于写函数的问题,我想知道R中的子集。在哪种情况下会使用这样的东西?是否可能将筛选的数据存储在列表中 data_filtered = data_full[id == FP438274 & start == 2019-19-9] 数据帧是列表 数据帧是一种特殊类型的列表,具有附加约束,例如,每个列表项或列必须具有相同的长度 如果将[与一个逗号一起使用,则可以将数据帧子集化,就像它只是一个列表一样——也就是说,您正在对列进行子集化,而忽略行。数据[x]相当于数据[,x] 假设id和

关于之前关于写函数的问题,我想知道R中的子集。在哪种情况下会使用这样的东西?是否可能将筛选的数据存储在列表中

data_filtered = data_full[id == FP438274 & start == 2019-19-9]
数据帧是列表

数据帧是一种特殊类型的列表,具有附加约束,例如,每个列表项或列必须具有相同的长度

如果将[与一个逗号一起使用,则可以将数据帧子集化,就像它只是一个列表一样——也就是说,您正在对列进行子集化,而忽略行。数据[x]相当于数据[,x]

假设id和start是与数据帧中的列数长度相同的向量,那么数据[id==FP438274&start==2019-19-9]应该可以正常工作。如果像上一个问题一样,id和start的长度与数据帧中的行数相同,那么数据[id==FP438274&start==2019-19-9]是无意义的

还要注意,您几乎肯定想要2019-19-9或as.Date2019-19-9,如2019-19-9=2000-9=1991所写,但我认为减法不是您想要的。数据帧是列表

数据帧是一种特殊类型的列表,具有附加约束,例如,每个列表项或列必须具有相同的长度

如果将[与一个逗号一起使用,则可以将数据帧子集化,就像它只是一个列表一样——也就是说,您正在对列进行子集化,而忽略行。数据[x]相当于数据[,x]

假设id和start是与数据帧中的列数长度相同的向量,那么数据[id==FP438274&start==2019-19-9]应该可以正常工作。如果像上一个问题一样,id和start的长度与数据帧中的行数相同,那么数据[id==FP438274&start==2019-19-9]是无意义的


还请注意,您几乎肯定想要2019-19-9或as.Date2019-19-9,如2019-19-9=2000-9=1991所写,但我不认为减法是您想要的。

我可能错了,但我认为不是,或者这将是在变量-列上选择,而不是在个人-行上选择子集。例如,使用mtcars数据的前6行et您可以将数据集转换为列表,并根据变量索引进行选择:

数据集格式 li1$mpg:num2122.821.418.718.1 >$cyl:num 6 4 6 8 6 列表格式 李先生2人名单 >$mpg:num[1:6]212122.821.418.718.1 >$cyl:num[1:6]6 4 8 6 当您尝试混合使用子集和选择时,情况会变得糟糕:

数据集格式 str li1[li$mpg<21]? >“data.frame”:3个变量中的6个对象: >$drat:num 3.93.93.85 3.08 3.15 2.76 >$wt:num 2.62 2.88 2.32 3.21 3.44。。。 >$carb:num 4 1 2 1 列表格式 str li[li$mpg<21] >3人名单 >$drat:num[1:6]3.93.93.85 3.08 3.15 2.76 >$wt:num[1:6]2.622.882.323.213.44。。。 >$carb:num[1:6]4 4 1 2 1 我还不能解释li[li$mpg<21]的结果,如果有人看到并想在这里提供帮助,我会很高兴


编辑莫特斯:我知道你需要清理的不是你的代码。我认为你最好试着理解用通常的方法编写正确/更健壮的R代码的意图[如果存在多个维度,则使用逗号运算符或dplyr::slice/dplyr::filter格式。

我可能是错的,但我认为不是错的,或者这将是在变量-列上进行选择,而不是在个人-行上进行子集选择。例如,使用mtcars数据集的前6行,您可以将数据集转换为列表,并基于n变量索引:

数据集格式 li1$mpg:num2122.821.418.718.1 >$cyl:num 6 4 6 8 6 列表格式 李先生2人名单 >$mpg:num[1:6]212122.821.418.718.1 >$cyl:num[1:6]6 4 8 6 当您尝试混合使用子集和选择时,情况会变得糟糕:

数据集格式 str li1[li$mpg<21]? >“data.frame”:3个变量中的6个对象: >$drat:num 3.93.93.85 3.08 3.15 2.76 >$wt:num 2.62 2.88 2.32 3.21 3.44。。。 >$carb:num 4 1 2 1 列表格式 str li[li$mpg<21] >3人名单 >$drat:num[1:6]3.93.93.85 3.08 3.15 2.76 >$wt:num[1:6]2.622.882.323.213.44。。。 >$carb:num[1:6]4 4 1 2 1 我还不能解释li[li$mpg<21]的结果,如果有人看到并想在这里提供帮助,我会很高兴

编辑莫特斯:我知道你需要清理的不是你的代码。我认为你最好试着理解,使用通常的[带逗号的运算符(如果有多个维度)或dplyr::slice/dplyr::filter格式)编写正确/更健壮的R代码的意图。

关于li[li$mpg<21]的结果,R通过在向量需要更长时重复向量来回收向量。例如,x=rnorm100;x[cTRUE,FALSE]将每隔x值给你一次。mtcars[cTRUE,FALSE]将每隔一列给你一次。mtcars[cFALSE,TRUE,TRUE]将给你第2、3、4、5、7、8列……在你的示例中,看看li$mpg,然后看看li$mpg<21,它是g
ives 6真/假值,FFFFTT,它将在11列长度上循环使用,给出5、6和11列。如果您不理解它的用途,所有代码都将无法工作。你没有给出正确或健壮的定义,但我喜欢dplyr,[是R的基础,我认为将其等同于既不正确也不健壮是不好的。你是对的。正确或健壮的代码我指的是清晰无歧义的代码,而不是li[li$mpg<21]循环使用参数的形式,并且至少对我来说,在这个操作没有意义时不会引发错误。我编辑了逗号部分,因为它不清楚:[是我的第一选择。在li[li$mpg<21]的结果中,R通过在向量需要更长时重复向量来循环使用向量。例如x=rnorm100;x[cTRUE,FALSE]将为您提供其他每一个x值。mtcars[cTRUE,FALSE]将为您提供其他每一列。mtcars[cFALSE,TRUE,TRUE]在你的例子中,看看li$mpg,然后看看li$mpg<21,它给出了6个真/假值,FFFFTT,这将在11列的长度上循环使用,给出5,6和11列。如果你不理解它的用途,所有代码都不会工作。你没有给出正确或健壮的定义,但是尽可能多的定义我喜欢dplyr,[是R的基础,我认为将其等同于既不正确也不稳健是不好的。你是对的。所谓正确或稳健的代码,我指的是清晰无歧义的代码,而不是li[li$mpg<21]表单,该表单可循环使用参数,并且至少对我来说,当此操作没有意义时不会引发错误。我已编辑逗号部分,因为它不清楚:[是我的第一选择。我猜数据应该是data.table。它允许您以这种方式使用列值进行子集。这是一个非常好的调用,可能值得评论。它们提供了一个tible,但数据表更有意义。我猜数据应该是data.table。它允许您以这种方式使用列值进行子集。T这是一个非常好的电话,也许值得评论。他们提供了一个tibble,但数据表更有意义。
> class(iris)
[1] "data.frame"
> is.list(iris)
[1] TRUE
> is.data.frame(iris)
[1] TRUE