我想按多列对data.frame进行排序.例如,对于下面的data.frame,我想按列z(降序)然后按列b(升序)排序:
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
dd
b x y z
1 Hi A 8 1
2 Med D 3 1
3 Hi A 9 1
4 Low C 9 2
Run Code Online (Sandbox Code Playgroud) 给出两个数据框:
df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))
df1
# CustomerId Product
# 1 Toaster
# 2 Toaster
# 3 Toaster
# 4 Radio
# 5 Radio
# 6 Radio
df2
# CustomerId State
# 2 Alabama
# 4 Alabama
# 6 Ohio
Run Code Online (Sandbox Code Playgroud)
我怎样才能做数据库风格,即sql风格,加入?也就是说,我该怎么做:
每当我想在R中做一些"map"py时,我通常会尝试使用一个函数 apply家族中.
但是,我从来没有完全理解它们之间的区别 - 如何{ sapply,lapply等}将函数应用于输入/分组输入,输出将是什么样的,甚至输入可以是什么 - 所以我经常只要仔细检查它们,直到我得到我想要的东西.
有人可以解释如何使用哪一个?
我当前(可能不正确/不完整)的理解是......
sapply(vec, f):输入是一个向量.output是一个向量/矩阵,其中element i是f(vec[i])一个矩阵,如果f有一个多元素输出
lapply(vec, f):相同sapply,但输出是一个列表?
apply(matrix, 1/2, f):输入是一个矩阵.output是一个向量,其中element i是f(矩阵的row/col i)tapply(vector, grouping, f):output是一个矩阵/数组,其中矩阵/数组中的元素是向量f分组g的值,和g被推送到行/列名称by(dataframe, grouping, f):让我们g成为一个分组.适用f于组/数据框的每一列.漂亮打印分组和f每列的值.aggregate(matrix, grouping, f):类似于by,但不是将输出打印得很漂亮,而是将所有内容都粘贴到数据帧中.侧问题:我还没有学会plyr或重塑-将plyr或reshape更换所有这些完全?
我有一些列要从数据框中删除.我知道我们可以使用以下内容单独删除它们:
df$x <- NULL
Run Code Online (Sandbox Code Playgroud)
但我希望用更少的命令来做到这一点.
另外,我知道我可以使用整数索引来删除列,如下所示:
df <- df[ -c(1, 3:6, 12) ]
Run Code Online (Sandbox Code Playgroud)
但我担心我的变量的相对位置可能会改变.
考虑到R的强大程度,我认为可能有一种更好的方法,就是逐一删除每一列.
我想删除此数据框中的行:
a)包含NA所有列的s.下面是我的示例数据框.
gene hsap mmul mmus rnor cfam
1 ENSG00000208234 0 NA NA NA NA
2 ENSG00000199674 0 2 2 2 2
3 ENSG00000221622 0 NA NA NA NA
4 ENSG00000207604 0 NA NA 1 2
5 ENSG00000207431 0 NA NA NA NA
6 ENSG00000221312 0 1 2 3 2
Run Code Online (Sandbox Code Playgroud)
基本上,我想获得如下的数据框.
gene hsap mmul mmus rnor cfam
2 ENSG00000199674 0 2 2 2 2
6 ENSG00000221312 0 1 2 3 2
Run Code Online (Sandbox Code Playgroud)
b)只在某些列中包含NAs …
赋值运算符=和<-R 之间有什么区别?
我知道运营商略有不同,如本例所示
x <- y <- 5
x = y = 5
x = y <- 5
x <- y = 5
# Error in (x <- y) = 5 : could not find function "<-<-"
Run Code Online (Sandbox Code Playgroud)
但这是唯一的区别吗?
当我将因子转换为数字或整数时,我得到基础级别代码,而不是值作为数字.
f <- factor(sample(runif(5), 20, replace = TRUE))
## [1] 0.0248644019011408 0.0248644019011408 0.179684827337041
## [4] 0.0284090070053935 0.363644931698218 0.363644931698218
## [7] 0.179684827337041 0.249704354675487 0.249704354675487
## [10] 0.0248644019011408 0.249704354675487 0.0284090070053935
## [13] 0.179684827337041 0.0248644019011408 0.179684827337041
## [16] 0.363644931698218 0.249704354675487 0.363644931698218
## [19] 0.179684827337041 0.0284090070053935
## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218
as.numeric(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
as.integer(f)
## [1] 1 1 3 2 5 …Run Code Online (Sandbox Code Playgroud) 我想在同一个图中绘制y1和y2.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做的时候,它们并没有被绘制在同一个地块中.
在Matlab中可以做到hold on,但有人知道如何在R中做到这一点吗?
我尝试使用安装包
install.packages("foobarbaz")
Run Code Online (Sandbox Code Playgroud)
但收到了警告
Warning message:
package 'foobarbaz' is not available (for R version x.y.z)
Run Code Online (Sandbox Code Playgroud)
为什么R不认为该套餐可用?
另请参阅这些问题,并参考此问题的具体实例:
我的软件包不能用于R 2.15.2
软件包"Rbbg"不可用(对于R版本2.15.2)
软件包不可用(对于R版本2.15.2)
软件包doMC不适用于R版本3.0.0警告install.packages
依赖'Rglpk'不适用于'fPortfolio'
软件包当我们的R版本没有软件包时该怎么办?
R版本3.0不适用于R的bigvis包吗?
包'syncwave'/'mvcwt'不可用(对于R版本3.0.2)
包'钻石'不可用(对于R版本3.0.0)R
的plyr包是否不适用于R 3.0.2版?
/sf/ask/1510646301/
无法在R 64 3.0.2
软件包上安装的软件包bigmemory "makeR"不可用(适用于3.0.2版) )
包"RTN"不可用(适用于R版本3.0.1)无法
安装geoR
软件包'twitterR'不可用(对于R版本3.1.0)
如何安装'Rcpp,包?我得到"包不可用"
包"数据集"不可用(对于R版本3.1.1)
"包'rhipe'不可用(对于R版本3.1.2)"
/sf/ 31439092 /包dplyr-是-不可供-R-版本-3-1-1