Tag: 应用

避免R中的for循环产生序列

我经常发现自己在R中使用下面的构造: a <- c(1, rep(NA, 20)) rate <- 1.2 for (i in 2:length(a)){ a[i] <- a[i-1]*rate } which yields: > a [1] 1.000000 1.200000 1.440000 1.728000 2.073600 … 什么会是一个更“R”的方式来完成这一点,避免for / while循环 ? 在电子表格中这么做很容易! 以下相关问题不会回答我的问题: 避免R中的循环 如何避免这个数据集中的循环?

简洁的R代码相当于Excel中的sumif函数 – 特别适用于数据框行

我需要从数据框中的一个列子集中有select地添加行的值。 值可以是0,1,2或3的整数。2s和3s的总和(不是2s和3s的计数,这很容易)给出了我们所测量的“强度”。 假设我的数据框是60列,我只想看看第二到第十一列。 实现这个(单向)的excel代码是相当简单的: =sumif(a2:a11,">1") 。 这将在该范围内添加所有2s和3s。 尽pipe过去我使用了aggregate() ,但是在这个话题上的大部分答案并不是真的想要做我期望做的事情,而且我也无法find一种方法让aggregate()以我的方式运行需要。 我也很困惑,试图让rowSums()来做到这一点。 最终我意识到我可以做到以下几点: apply(data[,2:11], 1, function(x)sum(2*(x==2), 3*(x==3), na.rm=T)) 这是迄今为止我发现复制我的特定期望的行为相当于Excel的sumif最快,最优雅的方式。 如果有人有更好的方法,我会很高兴听到。

移除千位分隔符

我导入了一个Excel文件,并得到了这样的数据框 structure(list(A = structure(1:3, .Label = c("1.100", "2.300", "5.400"), class = "factor"), B = structure(c(3L, 2L, 1L), .Label = c("1.000.000", "500", "7.800"), class = "factor"), C = structure(1:3, .Label = c("200", "3.100", "4.500"), class = "factor")), .Names = c("A", "B", "C" ), row.names = c(NA, -3L), class = "data.frame") 我现在想将这些chars转换为numeric或甚至integer 。 但是,点号( . )不是小数点,而是“千位分隔符”(德语)。 我将如何正确地转换数据框? […]