gpt4 book ai didi

r - 从 R 中的 data.frame 中某一列的每一行获取第一个字母

转载 作者:行者123 更新时间:2023-12-02 02:26:18 25 4
gpt4 key购买 nike

我遇到以下问题。给定一个数据框,每个名称有 5 个类别 -a、b、c、d、e(名称为 54)。
我从 R 中的整个数据框中给你一个小的摘录,只是为了让你对这个主题有一个感受。

                        **a       b      c           d      e
Teniers 15 12 13 6 G
Van Dyck 15 10 17 13 G
Bourdon 10 8 8 4 H
Le Brun 16 16 8 16 H
Le Suer 15 15 4 15 H
Poussin 15 17 6 15 H**
我已经成功地使用“排序”功能按字母顺序排列名称,这样不仅名称列按字母顺序排列,而且它们属于每个名称的 5 个类别也移动了。到目前为止,一切都很好,但任务是从每个名字中取出第一个字母,然后选择那些最常出现开头字母的名字。我可以用“strsplit”函数得到第一个字母,然后第一个字母出现在每一行,但在左边它们无处不在[1]“第一个字母”,新行[1]“另一个第一个字母”,新的 row1[...] 直到第 54 行;而不是数据框中的位置..
那么,有什么想法吗?
这是代码的摘录......
library(MASS)
data(painters)
attach(painters)
painters
str(painters)
summary(painters)

y <- as.vector(rownames(painters))
is.vector(y)




sortnames <- painters[order(y) , ]
as.data.frame( painters[order(y) , ] ) ##sorted in list; each name with ist relevant criteria

rownames(sortnames)
z <- rownames(sortnames)
str(z)
is.vector(z)
strsplit(z, "")

as.list(strsplit(z, ""))


liste <- as.list(strsplit(z, ""))
matrix <- as.matrix(liste)
matrix
matrix[,1]
matrix[1,]
matrix[1,1]
matrix[[1]] [1]

first <- matrix (as.matrix(liste))
for(i in 1:54) {print( matrix[[i]][1]) }

str(first)
提前问候并感谢您的快速响应!!
编辑
我需要的是:
要创建一个仅包含“rownames”列中每个名称的第一个字母的向量(或维度为 [54,1] 的矩阵),它的每一行应该是数据中已排序向量的行号帧,以便我们保持显示的数据帧中的位置。
例如
[1]"A"
[2]"B"
[3]"B"
[4]"C"
....
换句话说,必须提取仅包含行名第一个字母的向量/矩阵(在数据框中,“行名”仅定义为画家姓名,因此 6 的第 1 列 ;) )
我感谢您的帮助。
substr(data, 1, 1)
我是这样理解的:
 firstletter <- substr(rownames(sortnames), 1, 1)
firstletter <- as.data.frame(firstletter) **##how should I define "firstletter" for later use??**
firstletter


1 A
2 B
3 B
4 B
5 B
6 C
7 C
8 C
9 D
10 D
11 D
12 D
13 D
14 D
15 D
16 F
17 F
18 F
19 G
20 G
21 G
22 H
23 J
24 J
25 L
26 L
27 L
28 L
29 M
30 M
31 O
32 P
33 P
34 P
35 P
36 P
37 P
38 P
39 P
40 P
41 R
42 R
43 R
44 T
45 T
46 T
47 T
48 T
49 T
50 V
51 V
52 V
53 V
54 V
像魅力一样工作。提取画家姓名的第一个字母,行号保持原样。
所以,非常感谢!
附言我只有最后一个问题,R 中是否有一个函数或命令现在可以接受这个“第一个字母”[vector/matrix/list/data.frame] 取决于我们如何定义它的结构(最好的决定是什么?这里是稍后使用)并检查哪些是向量/矩阵/列表中最常出现的第一个字母并仅提取它们?还是太复杂了?
编辑:我现在需要的只是在减法(rbind 命令)之后从某个矩阵中删除冗余的最后一行
                  firstletter Composition Drawing Colour Expression School
Da Udine "D" "10" " 8" "16" " 3" "A"
Del Piombo "D" " 8" "13" "16" " 7" "A"
Diepenbeck "D" "11" "10" "14" " 6" "G"
Palma Giovane "P" "12" " 9" "14" " 6" "D"
Palma Vecchio "P" " 5" " 6" "16" " 0" "D"
Pordenone "P" " 8" "14" "17" " 5" "D"
Teniers "T" "15" "12" "13" " 6" "G"
The Carraci "T" "15" "17" "13" "13" "E"
Tintoretto "T" "15" "14" "16" " 4" "D"
Titian "T" "12" "15" "18" " 6" "D"
Da Vinci "D" "15" "16" " 4" "14" "A"
Domenichino "D" "15" "17" " 9" "17" "E"
Poussin "P" "15" "17" " 6" "15" "H"
The Carraci1 "T" "15" "17" "13" "13" "E"
用谷歌搜索了很长时间,直到现在没有任何功能对我有用..
有什么建议?

最佳答案

不会substr(row.names(data), 1, 1)得到你似乎在追求的第一个字母的向量?

编辑:我最初错误地写了 substr(row.names(data)) ,省略索引。

对于问题的第二部分,假设 firstletter是一个向量:
table(firstletter)给你第一个字母的频率表。所以一点点操作就能得到你想要的,例如:

names(sort(table(firstletter), decreasing=TRUE)[1:3])

这有帮助吗?
现在您可能想要做一些事情,例如,只保留原始数据集中与这三个最常用字母对应的行。一种方法是:
top3letters <- names(sort(table(vec), decreasing=TRUE)[1:3])
data <- subset(data, firstletter %in% top3letters)

关于r - 从 R 中的 data.frame 中某一列的每一行获取第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com