我是 R 的新手,我正在努力解决这个问题:我想评估 A 列中的值并获得该列中第一个非零值的位置。然后,我想获取在 B 列中找到的位置的值。这需要在与此类似的数据框中发生。
| A栏 | B栏 |
|---|---|
| 0 | 1998年 |
| 0 | 1997年 |
| 2 | 1996年 |
| 3 | 1995年 |
所以输出应该是:1996。
我试过使用 match() 没有成功。先感谢您。
这是我对我的项目的一个问题。
假设我有这个数据集。
X1 X2 X3 X4
1 1 2 1 3
2 1 3 2 1
3 1 3 4 2
4 1 1 2 3
5 3 4 3 2
6 2 1 3 4
Run Code Online (Sandbox Code Playgroud)
从这个数据集中,我希望能够指定任何随机行并找出单元格等于 1 的列名。例如,如果我要指定第一行,那么我将得到X1和X3作为我的输出。同样,如果我要指定第二行,那么我将得到X1和X4作为我的输出。如果我要指定第三行,那么我会得到X1我的输出。
我希望这些例子有意义。我在 StackOverflow 上环顾四周,但找不到我要找的东西。如果您能帮我解决这个问题,我将不胜感激。
我在 R 中有以下数据框:
ID = c(rep(1,5),rep(2,3),rep(3,2),rep(4,6));ID
VAR = c("A","A","A","A","B","C","C","D",
"E","E","F","A","B","F","C","F");VAR
CATEGORY = c("ANE","ANE","ANA","ANB","ANE","BOO","BOA","BOO",
"CAT","CAT","DOG","ANE","ANE","DOG","FUT","DOG");CATEGORY
DATA = data.frame(ID,VAR,CATEGORY);DATA
Run Code Online (Sandbox Code Playgroud)
如下表所示:
| ID | VAR | 类别 |
|---|---|---|
| 1 | A | 安尼 |
| 1 | A | 安尼 |
| 1 | A | 全日空航空公司 |
| 1 | A | ANB |
| 1 | 乙 | 安尼 |
| 2 | C | 嘘声 |
| 2 | C | 蟒蛇 |
| 2 | D | 嘘声 |
| 3 | 乙 | 猫 |
| 3 | 乙 | 猫 |
| 4 | F | 狗 |
| 4 | A | 安尼 |
| 4 | 乙 | 安尼 |
| 4 | F | 狗 |
| 4 | C | 氟尿嘧啶 |
| 4 | F | 狗 |
给定 RI 中上述数据帧的理想输出希望是这样的:
| ID | 文本 | 类别 |
|---|---|---|
| 1 | A | 安尼 |
| 2 | C … |
我想使用数据框创建一个新数据框,其中包含邮政编码、名称和名为计数的列,该列将包括每个邮政编码的名称计数。
Zip<-c("123245","12345","123245","123456","123456","12345")
Name<-c("Bob","Bob","Bob","Jack","Jack","Mary"),
df<-data.frame(Zip,Name,Name2)
library(dplyr)
df %>%
group_by(Zip) %>%
mutate(Name = cumsum(Name))
Run Code Online (Sandbox Code Playgroud)
预期的
Zip Name Count
1 123245 Bob 2
2 12345 Bob 1
3 12345 Mary 1
4 123456 Jack 2
Run Code Online (Sandbox Code Playgroud) 已经提出了类似的问题,但是,没有一个问题需要分割向量名称,所以我提出了一个新问题。
我正在尝试将命名向量转换为 R 中的对称矩阵。我的向量包含矩阵中每个值组合的名称。所以我需要将名称分成各个组成部分。
例如,如果我的数据如下所示:
v <- c(
"x1 x2" = 0.81899860,
"x1 x3" = 0.10764701,
"x2 x3" = 0.03923967,
"x1 x4" = 0.03457240,
"x2 x4" = 0.05954789,
"x3 x4" = 0.15535316,
"x1 x5" = 0.04041266,
"x2 x5" = 0.05421003,
"x3 x5" = 0.09198977,
"x4 x5" = 0.15301872
)
Run Code Online (Sandbox Code Playgroud)
我们可以看到每个名称都是 2 个变量的组合。我试图将其转换为对称矩阵(对角线为零)。为了清楚起见,我想要的输出如下:
x1 x2 x3 x4 x5
x1 0.00000000 0.81899860 0.10764701 0.03457240 0.04041266
x2 0.81899860 0.00000000 0.03923967 0.05954789 0.05421003
x3 0.10764701 0.03923967 0.00000000 0.15535316 0.09198977
x4 0.03457240 0.05954789 0.15535316 0.00000000 …Run Code Online (Sandbox Code Playgroud) 我有两个数据框,如下所示:
\n\nlibrary(tidyverse)\ndate = c(rep(as.Date("2022-01-01"),4),rep(as.Date("2022-02-01"),4),rep(as.Date("2022-03-01"),3))\nA = seq(1,11,1)\nB = seq(12,22,1)\nC = seq(23,33,1)\nsymbol = c(rep("A",4),rep("B,C",4),rep("D,A",3))\ndf1 = tibble(date,A,B,C,symbol);df1\n# A tibble: 11 \xc3\x97 5\n date A B C symbol\n <date> <dbl> <dbl> <dbl> <chr> \n 1 2022-01-01 1 12 23 A \n 2 2022-01-01 2 13 24 A \n 3 2022-01-01 3 14 25 A \n 4 2022-01-01 4 15 26 A \n 5 2022-02-01 5 16 27 B,C \n 6 2022-02-01 6 17 28 B,C \n 7 2022-02-01 7 18 29 B,C \n …Run Code Online (Sandbox Code Playgroud) 假设我有一个如下所示的嵌套列表
\ntest <- list(\n a = data.frame(x = 1),\n b = "foo",\n c = list(\n d = 1:5,\n e = data.frame(y = 1),\n f = "a",\n list(g = "hello")\n )\n)\ntest\n#> $a\n#> x\n#> 1 1\n#> \n#> $b\n#> [1] "foo"\n#> \n#> $c\n#> $c$d\n#> [1] 1 2 3 4 5\n#> \n#> $c$e\n#> y\n#> 1 1\n#> \n#> $c$f\n#> [1] "a"\n#> \n#> $c[[4]]\n#> $c[[4]]$g\n#> [1] "hello"\nRun Code Online (Sandbox Code Playgroud)\n我想知道这个嵌套列表中字符元素的位置。在这种情况下,我想返回一个命名向量或命名列表,其中TRUE元素是否为字符,FALSE否则返回。
我可以用 来做到这一点rapply,它会取消列出所有内容:
rapply(test, is.character)\n#> a.x b c.d c.e.y …Run Code Online (Sandbox Code Playgroud) 我有这个字符串变量。
x <- "[2,3,3,5]"
我想得到这个的平均值。我怎样才能在 R 上实现这一目标?
这是我的数据:
df1 <- fread('
id , date1 , date2
id_0001 , 2017-01-01, 2017-01-05
id_0002 , 2017-01-02, 2017-01-08
id_0003 , 2017-01-04, 2017-01-07
')
df2<- fread('
date , value
2017-01-01, 1
2017-01-02, 2
2017-01-03, 5
2017-01-04, 5
2017-01-05, 5
2017-01-06, 3
2017-01-07, 4
2017-01-08, 7
2017-01-09, 5
2017-01-10, 1
2017-01-11, 5
')
Run Code Online (Sandbox Code Playgroud)
我想总结(获取平均值)每个from在 rowwise和之间的范围内的valuefrom 。df2iddf1date1date2
结果是这样的:
| ID | 日期1 | 日期2 | 价值 |
|---|---|---|---|
| id_0001 | 2017-01-01 | 2017-01-05 | mean(c(1,2,5,5,5)) |
| id_0002 | 2017-01-02 | 2017-01-08 | mean(c(2,5,5,5,3,4,7)) |
| id_0003 | 2017-01-04 | 2017-01-07 | mean(c(5,5,3,4)) |
我知道我可以扩展idby …
我有以下代码:
mat = matrix(c(1, 3, 4, 11, 13, 13), nrow = 2, ncol = 3, byrow = TRUE)
mat_grouped = apply(mat, 1, function(row) tapply(row, as.factor(row), length))
Run Code Online (Sandbox Code Playgroud)
输出如下列表:
[[1]]
1 3 4
1 1 1
[[2]]
11 13
1 2
Run Code Online (Sandbox Code Playgroud)
但是我希望输出显示为矩阵,其中列名称由矩阵中的所有值给出并按行分组:
1 3 4 11 13
[1,] 1 1 1 0 0
[2,] 0 0 0 1 2
Run Code Online (Sandbox Code Playgroud)
可以以这种形式获取我的数据吗?