Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_Function_Unique_Lapply_Rbind - Fatal编程技术网

R 基于唯一值将函数应用于数据帧

R 基于唯一值将函数应用于数据帧,r,function,unique,lapply,rbind,R,Function,Unique,Lapply,Rbind,我需要对数据帧应用一个函数,通过唯一值进行子集或分组 我的数据如下所示: FID FIX_NO ELK_ID ALTITUDE XLOC YLOC DATE_TIME JulDate 1 NA 5296 393 2260.785 547561.3 4771900 NA 140 2 NA 5297 393 2254.992 547555.9 4771906 NA 140 3 NA 5298 393

我需要对数据帧应用一个函数,通过唯一值进行子集或分组

我的数据如下所示:

FID FIX_NO ELK_ID ALTITUDE     XLOC    YLOC DATE_TIME JulDate
1   NA   5296    393 2260.785 547561.3 4771900        NA     140
2   NA   5297    393 2254.992 547555.9 4771906        NA     140
3   NA   5298    393 2256.078 547563.5 4771901        NA     140
4   NA   5299    393 2247.047 547564.7 4771907        NA     140
5   NA   5300    393 2264.875 547558.3 4771903        NA     140
6   NA   5301    393 2259.496 547554.1 4771925        NA     140
...
24247   NA   4389    527 2204.047 558465.7 4775358        NA     161
24248   NA   4390    527 2279.078 558884.1 4775713        NA     161
24249   NA   4391    527 2270.590 558807.9 4775825        NA     161
24250   NA   4392    527 2265.258 558732.2 4775805        NA     161
24251   NA   4393    527 2238.375 558672.4 4775781        NA     161
24252   NA   4394    527 2250.055 558686.6 4775775        NA     161
我的目标是创建一个新的data.frame,为每个唯一的麋鹿ID在每个日期随机选择4行。 如果我手工操作,对于每个唯一的麋鹿ID,我的代码如下:


oneelk这是一个data.table解决方案

library(data.table)
setDT(dataset)[,.SD[sample(.N,4)],by=list(ELK_ID,JulDate)]

#    ELK_ID JulDate FID FIX_NO ALTITUDE     XLOC    YLOC DATE_TIME
# 1:    393     140  NA   5297 2254.992 547555.9 4771906        NA
# 2:    393     140  NA   5299 2247.047 547564.7 4771907        NA
# 3:    393     140  NA   5298 2256.078 547563.5 4771901        NA
# 4:    393     140  NA   5300 2264.875 547558.3 4771903        NA
# 5:    527     161  NA   4394 2250.055 558686.6 4775775        NA
# 6:    527     161  NA   4392 2265.258 558732.2 4775805        NA
# 7:    527     161  NA   4390 2279.078 558884.1 4775713        NA
# 8:    527     161  NA   4393 2238.375 558672.4 4775781        NA

注意,只有当ELK_ID和JulDate的每个组合至少有4行时,这才有效。

这里是data.table解决方案

library(data.table)
setDT(dataset)[,.SD[sample(.N,4)],by=list(ELK_ID,JulDate)]

#    ELK_ID JulDate FID FIX_NO ALTITUDE     XLOC    YLOC DATE_TIME
# 1:    393     140  NA   5297 2254.992 547555.9 4771906        NA
# 2:    393     140  NA   5299 2247.047 547564.7 4771907        NA
# 3:    393     140  NA   5298 2256.078 547563.5 4771901        NA
# 4:    393     140  NA   5300 2264.875 547558.3 4771903        NA
# 5:    527     161  NA   4394 2250.055 558686.6 4775775        NA
# 6:    527     161  NA   4392 2265.258 558732.2 4775805        NA
# 7:    527     161  NA   4390 2279.078 558884.1 4775713        NA
# 8:    527     161  NA   4393 2238.375 558672.4 4775781        NA

注意,只有当麋鹿ID和JulDate的每个组合至少有4行时,这才有效。

尝试使用两列进行拆分,可能是splitdataset,dataset[,cELK_ID,JulDate]

尝试使用两列进行拆分,可能是splitdataset,dataset[,cELK_ID,JulDate]

您还可以使用tapply创建索引,然后使用名为df的数据集创建子集


您还可以使用tapply创建索引,然后假设您的数据集为df

还可以添加一个dplyr解决方案:

library(dplyr)
newdf <- yourdata %>%
          group_by(ELK_ID, JulDate) %>%
          sample_n(4)
还可以添加一个dplyr解决方案:

library(dplyr)
newdf <- yourdata %>%
          group_by(ELK_ID, JulDate) %>%
          sample_n(4)

使用{}按钮将数据放入代码块。使用{}按钮将数据放入代码块。感谢您提供的解决方案,不幸的是,我确实有一些ELK_ID少于4个日期。然后使用sample.N,min.N,4而不是sample.N,4。这将随机抽取最多4行的样本。感谢您提供的解决方案,不幸的是,我确实有一些麋鹿ID的日期少于4个。然后使用sample.N,min.N,4代替sample.N,4。这将随机抽取行数为多少的样本,最多4行。当我定义indx时,我得到一个错误,即“参数必须具有相同的长度”。我知道ELK_ID的每个值都有一个对应的JulDate值,所以我不确定为什么会出现错误。之所以出现此错误,是因为您将数据集转换为data.table对象,首先运行了@jihoward code。如果您想让它工作,请在原始数据集上运行它当我定义indx时,我得到一个错误,即“参数的长度必须相同”。我知道ELK_ID的每个值都有一个对应的JulDate值,所以我不确定为什么会出现错误。之所以出现此错误,是因为您将数据集转换为data.table对象,首先运行了@jihoward code。如果你想让它工作,在你的原始数据集上运行它。我想这正是我想要的,但我需要管理员批准才能更新我的R版本,这样我才能访问dplyr。会让你知道事情的进展!谢谢librarydata.table解决方案在不必更新我的R版本的情况下就可以工作。不过,感谢您的帮助!我想这正是我想要的,但我需要管理员批准才能更新我的R版本,这样我才能访问dplyr。会让你知道事情的进展!谢谢librarydata.table解决方案在不必更新我的R版本的情况下就可以工作。不过,感谢您的帮助!