我知道这个主题在SO上出现了几次,但是这些例子往往更复杂,我想对这个简单的情况有一个答案(或一组可能的解决方案).我仍然围绕着R和编程一般.所以在这里我想使用lapply函数或一个简单的循环来data列出哪个是三个向量列表的列表.
data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))
data <- list(data1,data2,data3)
Run Code Online (Sandbox Code Playgroud)
现在,我想获得每个向量的均值列表.结果将是三个元素(列表)的列表.
我只知道如何获得矢量列表的结果列表
for (i in 1:length(data1)){
means <- lapply(data1,mean)
}
Run Code Online (Sandbox Code Playgroud)
或者:
lapply(data1,mean)
我知道如何使用所有方法rapply:
rapply(data,mean)
问题是rapply不维护列表结构.非常感谢帮助和可能的一些提示/解释.
需要解决方案,将非常感谢帮助.
在下面的代码中,我创建了三个栅格.然后我number在这个栅格上创建一个随机的点位置,我收到一个三个矩阵的列表,其中包含那些随机位置的坐标samples.然后,我将这些位置和样本栅格值接收samplevalues.
我想改变的是,我想创建一组100,150,200和250个随机点位置(numberv).因此,在生成这些位置并接收位置列表后,每个栅格将被采样length(numberv) 次数(在这种情况下为4次).因为我有三个栅格,所以我想得到一个列表,第一个元素包括从我的三个栅格中获得的采样值,每个采样100次,第二个栅格值每次采样150次,等等.列表将包含length(numberv)元素.然后我会使用这些位置来获取这些位置的栅格值.
我只用一个样本(使用了1个元素向量number)粘贴了一个简单案例的干净代码,希望它有所帮助.
y <- matrix(1:300,100,3)
mv <- c(1,2,3)
rep = 200
valuematrix <- vector("list",ncol(y))
for (i in 1:ncol(y)) {
newmatrix <- replicate(rep,y[,i])
valuematrix[[i]] <- newmatrix
}
library(sp)
library(raster)
rasters <- setNames(lapply(valuematrix, function(x) raster(x)),
paste0('raster',1:length(mv)))
# Create a loop that will sample the rasters
library(dismo)
number = 100 # current number for random sample points number
numberv = c(100,150,200,250) # sample number vector i want …Run Code Online (Sandbox Code Playgroud) 在下面的数据集中,我想将列中Size的值乘以值Month1,Month2或者Month3取决于列中的数字Month.因此,如果在某一行中Month值为2,我想将列中Size的值乘以列中的值Month2,并将结果保存在新列中NewSize.非常感谢您的帮助!
Orig = c("A","B","A","A","B","A","A","B","A")
Dest = c("B","A","C","B","A","C","B","A","C")
Month = c(1,1,1,2,2,2,3,3,3)
Size = c(30,20,10,10,20,20,30,50,20)
Month1 = c(1,0.2,0,1,0.2,0,1,0.2,0)
Month2 = c(0.6,1,0,0.6,1,0,0.6,1,0)
Month3 = c(0,1,0.6,0,1,0.6,0,1,0.6)
df <- data.frame(Orig,Dest,Month,Size,Month1,Month2,Month3)
df
Orig Dest Month Size Month1 Month2 Month3
1 A B 1 30 1.0 0.6 0.0
2 B A 1 20 0.2 1.0 1.0
3 A C 1 10 0.0 0.0 0.6
4 A B 2 10 …Run Code Online (Sandbox Code Playgroud) 下面您可以在 R 中找到一段代码,我希望将其转换为使用多个 CPU 作为并行进程运行。我尝试使用foreachpackage,但没有走得太远。考虑到我有 3 级嵌套循环,我找不到一个很好的例子如何让它工作。我们将非常感谢您的帮助。下面的代码示例 - 我做了一个简单的函数,因此它可以作为示例:
celnum <- c(10,20,30)
t2 <- c(1,2,3)
allrepeat <- 10
samplefunction <- function(celnum,t2){
x <- rnorm(100,celnum,t2)
y = sample(x, 1)
z = sample(x,1)
result = y+z
result
}
Run Code Online (Sandbox Code Playgroud)
常规方式获取结果:
z_grid <- matrix(, nrow = length(celnum), ncol = length(t2))
repetitions <- matrix(, nrow = allrepeat, ncol = 1)
set.seed=20
for(i in 1:length(celnum)){
for (j in 1:length(t2)){
for (k in 1:allrepeat) {
results <- samplefunction(celnum[i],t2[j])
repetitions[k] <- results
z_grid[i,j] <- mean(repetitions,na.rm=TRUE)
} …Run Code Online (Sandbox Code Playgroud) 我在R中找不到这个问题的答案.我想生成0到1'随机样本'的随机样本.对于每个样本,我希望有一个特定数量的值'numval',它是从矢量'Prob'的长度导出的.'Prob'给出了每个单独的点将为0或1的概率值.因此,在这种情况下,第一个数字的概率值为0.9为1,0.1为0.依此类推.然后,我想重复随机样本生成1000次.我有一个脚本(下面)生成随机0和1,但我在给出概率值时缺少组件.非常感谢帮助 - 我对R来说相当新.
Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
RandomSample <- list()
zeroones <- c(0,1)
rep = 1000
numval <- length(Prob)
for (i in 1:rep) RandomSample[[i]] <- c(sample(zeroones,numval,replace = TRUE))
t(sapply(RandomSample, unlist, simplify = TRUE))
Run Code Online (Sandbox Code Playgroud) 我想mutate一次将一个函数应用于多个列。列以特定字符串开头,这就是它们的标识方式。我还想知道如何将其应用于由索引标记的列的解决方案,即。data_fake[3:4]. 目标是删除所有非数字字符并将值转换为数字。不能让它伤心地工作。代码末尾给出了所需的结果。非常感谢。
data_fake <- data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
c("23","3 bundles","4","5","NA","1"), c("3","5 packs","6","78","7","8"))
colnames(data_fake) <- c("AB foo ab", "AB foo bc", "CD foo ab","CD foo bc")
data_fake <- as_tibble(data_fake)
data_fake %>%
select(starts_with("CD foo")) %>%
mutate(as.numeric(gsub("[^0-9]", "")))
data_fake_results <- as_tibble(data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
c(23,3,4,5,NA,1), c(3,5,6,78,7,8)))
Run Code Online (Sandbox Code Playgroud) 这是我想要构建的 ggplot 示例。在我的数据中,我遇到一个问题,即在直方图的一小部分中有很多值。因此,我想让 x 轴不成比例地拉伸(此处位于 的值之间80,81,82,83,84,85)。因此,刻度线将在图表上均匀分布,并且刻度线之间的间距将与该图表上值的增量增加不成比例。因此,我还想对直方图的该部分应用不同的箱大小(比方说binwidth = 1)。
library(ggplot2)
set.seed(42)
data <- data.frame(c(rnorm(mean=80,sd=20,30)),seq(1,30,1),
c("A","B","B","A","A","B","B","A","A","A",
"A","B","B","A","A","B","B","A","A","B",
"B","A","A","B","B","A","A","B","B","A"))
colnames(data) <- c("vals","respondent","category")
# Plot the number of vals
ggplot(data,aes(x = vals,fill = category)) +
geom_histogram(position = "stack",binwidth = 5) +
ggtitle("plot")+
#scale_x_continuous(c(40,50,60,70,80,81,82,83,84,85,95,105,115))+
theme_minimal() +
ylab("Number of respondents")+xlab("Number of vals")
Run Code Online (Sandbox Code Playgroud) 我有一个raster图像 (.tif),每个像素的连续值在 0 和 1 之间。我想计算这个区域(也可以是多个像素),raster其中的值在一组值间隔中:即 0.1 - 0.2 , 0.3 - 0.4, 0.7 - 0.8。最终目的是看哪个区间占据的面积更大。有什么想法可以尝试或如何处理它R?