我有一个数据框如下:
COL_1 COL_2 COL_3 COL_4 COL_5 COL_6
<int> <int> <int> <int> <int> <int>
1 1 1 1 1 1 1
2 1 1 1 1 1 2
3 1 1 1 1 1 3
4 1 1 1 1 1 4
5 1 2 1 1 1 5
6 1 1 1 1 1 6
7 1 3 4 5 6 7
8 1 1 1 1 1 8
9 1 1 9 1 1 9
10 1 3 5 …Run Code Online (Sandbox Code Playgroud) 我有一个矩阵,其中包含几个国家的行业经济信息。我想做一系列取决于矩阵中元素的位置和相应的列/行名称的计算。
行/列名称包含三个字母的国家/地区代码,后跟行业编号。行名称和列名称相同。
计算如下:
我将举一个简单的例子,尽管我的数据比这个例子大得多。
假设我有矩阵a
set.seed(10)
a <- matrix(sample(36) , nrow = 6)
colnames(a) <- rownames(a) <- paste( rep(c("aaa" , "bbb" , "ccc") , each = 2), rep(c(1:2) , times = 3))
Run Code Online (Sandbox Code Playgroud)
给予:
aaa 1 aaa 2 bbb 1 bbb 2 ccc 1 ccc 2
aaa 1 9 19 26 6 5 21
aaa 2 10 24 2 30 36 27
bbb 1 12 15 13 11 20 16
bbb 2 8 28 33 18 34 17 …Run Code Online (Sandbox Code Playgroud) 我有一个名单-0.5,-0.6,0.7,1,1.5,3,-5,我想将它作为排序3,-5,1.5,-0.6,1,-0.5,0.7.换句话说,我想将列表分为正面和负面列表,然后将它们从最大到最小排序,但是交替排序.
我怎样才能做到这一点?
我有一个像这样的购物清单数据:
df <- data.frame(id = 1:5, item = c("apple2milk5", "milk1", "juice3apple5", "egg10juice1", "egg8milk2"), stringsAsFactors = F)
# id item
# 1 1 apple2milk5
# 2 2 milk1
# 3 3 juice3apple5
# 4 4 egg10juice1
# 5 5 egg8milk2
Run Code Online (Sandbox Code Playgroud)
我想将变量item分成多列,并记录货物后面的数字。我遇到的问题是每个人购买的商品都不一样,因此我无法使用tidyr::separate()或其他类似功能来解决它。我期望的是:
# id apple milk juice egg
# 1 1 2 5 NA NA
# 2 2 NA 1 NA NA
# 3 3 5 NA 3 NA
# 4 4 NA NA 1 10
# 5 …Run Code Online (Sandbox Code Playgroud) 有变量x,,y。z我想过滤掉其中任何一个没有巨大差距的(差距小于5%)。下面的代码可以模拟,但是如果我想要更多的变量进行比较,代码就会很无聊。有什么聪明的方法吗?谢谢!
library(tidyverse)
diamonds %>%
select(x, y, z) %>%
filter(abs((x - y)/ max(x, y)) < 0.05,
abs((x - z)/ max(x, z)) < 0.05,
abs((y - z)/ max(y, z)) < 0.05)
Run Code Online (Sandbox Code Playgroud) 我在任何地方都找不到这个。我希望能够创建一个列,该列使用包含“end”的列之前的列中的数据。
我什至可能没有解释得那么好。
例如:
df =
V1 V2 V3 V4 V5 V6
0 start 1 end ended 0
3 end 0 start 5 0
2 start 3 next 6 end
Run Code Online (Sandbox Code Playgroud)
我希望新列是下一列“结束”之前的数字。
V1 V2 V3 V4 V5 V6 end_num
0 start 1 end ended 0 1
3 end 0 start 5 0 3
2 start 3 next 6 end 6
Run Code Online (Sandbox Code Playgroud) 我正在尝试比较两个不同大小的数据帧,并使用 mutate across 添加新列。
这是我的数据框。
df <- data.frame(No = c(1,2,3,4),
s_Ca = c(NA, 250, NA, 500),
s_P = c(300, NA, NA, NA),
s_Fe = c(NA, 10, NA, NA),
s_K = c(NA, NA, NA, 300))
Run Code Online (Sandbox Code Playgroud)
我想将它与下面的数据框进行比较。
intake <- data.frame(cutoff = c(210, 210, 3.6, 1050),
nut = c("Ca", "P", "Fe", "K"))
Run Code Online (Sandbox Code Playgroud)
Ca如果in的值df大于Cain的截止值intake,那么我将向新列添加 1 s_Ca_cat,否则添加 0。
P如果in的值df大于Pin的截止值intake,我将在新列中添加 2 s_P_cat,依此类推。
也就是说,我想要的结果是这样的
df_cat <- data.frame(No = c(1,2,3,4),
s_Ca_cat = …Run Code Online (Sandbox Code Playgroud) 我认为这是一个简单的问题,但我还没有找到合适的解决方案.首先是一组简化数据:
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
Run Code Online (Sandbox Code Playgroud)
我们可以看到所有类都是整数.我想要实现的是将4个类分别转换为整数,数字,字符和因子.当然,我可以使用
df$V1 <- as.XXX(df$V1)
Run Code Online (Sandbox Code Playgroud)
对于每一列,但我认为这是低效的.
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num …Run Code Online (Sandbox Code Playgroud) 可重现的数据:
data(crabs, package = "MASS")
df <- crabs[-(1:3)]
set.seed(12345)
df$GRP <- kmeans(df, 4)$cluster
df.order <- dplyr::arrange(df, GRP)
Run Code Online (Sandbox Code Playgroud)
数据说明:
df有 5 个数值变量。我根据这 5 个属性进行了 K-means 算法,并生成了一个GRP具有 4 个级别的新分类变量。接下来,我订购了它GRP并命名了它df.order。
我做了什么pheatmap:
## 5 numerical variables for coloring
colormat <- df.order[c("FL", "RW", "CL", "CW", "BD")]
## Specify the annotation variable `GRP` shown on left side of the heatmap
ann_row <- df.order["GRP"]
## gap indices
gapRow <- cumsum(table(ann_row$GRP))
library(pheatmap)
pheatmap(colormat, cluster_rows = F, show_rownames = F, …Run Code Online (Sandbox Code Playgroud) 我有两个要比较的列表。我想看看列表中每个元素的值是否相等。
> m1
[[1]]
integer(0)
[[2]]
[1] 3 4
[[3]]
integer(0)
[[4]]
[1] 1
[[5]]
[1] 2 3 4
> m3
[[1]]
[1] 3
[[2]]
[1] 1 4
[[3]]
[1] 2
[[4]]
[1] 3
[[5]]
[1] 1 4
Run Code Online (Sandbox Code Playgroud)
我期望这样的结果:
> Result
[[1]]
[1]
FALSE
[[2]]
[1]
FALSE TRUE
[[3]]
[1]
FALSE
[[4]]
[1]
FALSE
[[5]]
[1]
FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
如果我尝试申请m1[1] == m3[1]或类似,我会收到如下消息
m1 == m3 中的错误:未实现这些类型的比较。
这么简单的事我都做不到!提前感谢您的帮助。
> m1
[[1]]
integer(0)
[[2]]
[1] 3 4
[[3]]
integer(0) …Run Code Online (Sandbox Code Playgroud)