小编Ann*_*rie的帖子

使用R中的grep从data.frame中删除行

我有一个像这样的数据帧:

    d <- data.frame(cbind(x=1, y=1:10,    z=c("apple","pear","banana","A","B","C","D","E","F","G")), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

我想从这个数据框中删除一些行,具体取决于列z的内容:

    new_d <- d[-grep("D",d$z),]
Run Code Online (Sandbox Code Playgroud)

这很好用; 第7行现已删除:

    new_d
     x  y      z
  1  1  1  apple
  2  1  2   pear
  3  1  3 banana
  4  1  4      A
  5  1  5      B
  6  1  6      C
  8  1  8      E
  9  1  9      F
  10 1 10      G
Run Code Online (Sandbox Code Playgroud)

但是,当我使用grep搜索列z中不存在的内容时,它似乎删除了数据帧的所有内容:

    new_d <- d[-grep("K",d$z),]
    new_d
    [1] x y z
    <0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

我想以这种或其他方式搜索和删除行,即使我搜索的字符串不存在.怎么去这个?

grep row r dataframe

11
推荐指数
2
解决办法
2万
查看次数

将标签名称绘制到plot3d(rgl)生成的3D图上

我想使用plot3d()(rgl)绘制具有3维的MDS分析的结果.数据和代码如下所示:

   threedim$points
              [,1]        [,2]      [,3]        [,4]
   Dutch      -6.45931417  -2.1589222 -5.829244  -0.4891066
   German     -7.27770201   0.2666916 -2.198595   6.8658602
   Albanian    4.11799731   0.6810336 11.356935  -2.2623921
   Armenian   13.58431670  21.6527626 -2.245146   6.3506665
   French     -0.24170759  -0.8579159 14.197611  -0.1871443

   threedim$points[,1] -> x
   threedim$points[,2] -> y
   threedim$points[,3] -> z
   library(rgl)
   plot3d(x,y,z)
   text(c("Dutch","German","Albanian","Armenian","French"))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

"警告信息:在xy.coords(x,y,recycle = TRUE):由强制引入的NAs"

我究竟做错了什么?

3d plot text r rgl

9
推荐指数
1
解决办法
1万
查看次数

为多个变量制作堆积条形图 - R中的ggplot2

我在ggplot2中制作堆积条形图时遇到一些问题.我知道如何使用barplot()创建一个,但我想使用ggplot2,因为很容易使条形高度相同(如果我没有弄错的话,'position ='fill'').

我的问题是我有多个变量,我想在彼此之上绘制; 我的数据看起来像这样:

dfr <- data.frame(
  V1 = c(0.1, 0.2, 0.3),
  V2 = c(0.2, 0.3, 0.2),
  V3 = c(0.3, 0.6, 0.5),
  V4 = c(0.5, 0.1, 0.7),
  row.names = LETTERS[1:3]
)
Run Code Online (Sandbox Code Playgroud)

我想要的是在X轴上具有类别A,B和C的图,并且对于每个图,V1,V2,V3和V4的值在Y轴上彼此堆叠.我见过的大多数图表只在Y轴上绘制了一个变量,但我确信可以用某种方式做到这一点.

我怎么能用ggplot2做到这一点?谢谢!

r ggplot2

8
推荐指数
1
解决办法
2万
查看次数

将多个列值粘贴到R中的一个值中

我有一个非常简单的问题,我无法找到一个直截了当的答案.我有一个看起来像这样的data.frame:

df3 <- data.frame(x=c(1:10),y=c(5:14),z=c(25:34))

ID  x  y  z
1   1  5 25
2   2  6 26
3   3  7 27
etc.
Run Code Online (Sandbox Code Playgroud)

我希望将每个列中的不同值"粘贴"在一起,以便它们形成单个组合值,如下所示:

ID x+y+z
1  1525
2  2626
3  3727
Run Code Online (Sandbox Code Playgroud)

我确信这很容易做到,但我不知道怎么做!

r dataframe pasting

3
推荐指数
1
解决办法
8431
查看次数

R删除列表元素的行并保留行名

我有一个带有空单元格的数据框,我将其分成一个列表:

df <- data.frame(c("q","w","","r","t","y"),c("a","b","","d","e","f"),c("x","c","v","b","","m"))
colnames(df) <- c("qwerty","abc","bnm")
rownames(df) <- c("1a","1b","1c","1d","1e","1f")
list <- lapply(df, as.data.frame)
for(i in 1:length(list)){  rownames(list[[i]]) <- rownames(df) }
Run Code Online (Sandbox Code Playgroud)

但是,当我从列表的元素之一中删除空行时,该元素的行名将被删除:

list[[1]] <- list[[1]][list[[1]] != "",]
rownames(list[[1]])
NULL
Run Code Online (Sandbox Code Playgroud)

如何防止这种情况发生?

row r list names

3
推荐指数
1
解决办法
1026
查看次数

在 R 中制作 WCS Munsell 颜色图表,scale_fill_manual、ggplot2 中的顺序问题

我想为世界色彩调查所使用的芯片制作孟塞尔色彩图表。它应该看起来像这样:

在此输入图像描述

需要的信息可以在WCS页面上找到,这里,我采取以下步骤:

library(munsell) # https://cran.r-project.org/web/packages/munsell/munsell.pdf
library(ggplot2)

# take the "cnum-vhcm-lab-new.txt" file from: https://www1.icsi.berkeley.edu/wcs/data.html#wmt
# change by replacing .50 with .5 removing .00 after hue values

WCS <- read.csv("cnum-vhcm-lab-new.txt", sep = "\t", header = T)
WCS$hex <- mnsl2hex(hvc2mnsl(hue = WCS$MunH, value = ceiling(WCS$MunV), chroma = WCS$C), fix = T)

# this works, but the order of tiles is messed up
ggplot(aes(x=H, y=V, fill=hex), data = WCS) +   
  geom_tile(aes(x=H, y=V), show.legend = F) +
  scale_fill_manual(values = WCS$hex) +
  scale_x_continuous(breaks = …
Run Code Online (Sandbox Code Playgroud)

r colors ggplot2

2
推荐指数
1
解决办法
321
查看次数

将数据帧的不同行转换为R中的单个行

我有一个如下所示的数据集:

CATA 1 10101
CATA 2 11101
CATA 3 10011
CATB 1 10100
CATB 2 11100
CATB 3 10011
Run Code Online (Sandbox Code Playgroud)

等等

我想将这些不同的行组合成一个长行,如下所示:

CATA 101011110110011
CATB 101001110010011
Run Code Online (Sandbox Code Playgroud)

我已尝试使用melt()然后dcast(),但它似乎不起作用.有没有人有一些简单的代码来做到这一点?

row r dataframe pasting

1
推荐指数
1
解决办法
5057
查看次数

当使用daply进行频率计数时,"dims [product 0]与对象的长度不匹配"R中的错误

我有一个data.frames列表,如下所示:

df=data.frame(
data_id=rep(LETTERS[1:10],each=1),
data_value=c(1,2,2,3,3,2,3,1,1,3))
df2=data.frame(
data_id=rep(LETTERS[1:10],each=1),
data_value=c(2,1,3,1,1,1,2,1,2,1))
df3=data.frame(
data_id=rep(LETTERS[1:10],each=1),
data_value=c(2,2,3,3,1,2,2,1,2,3))
df.list <- list(df, df2, df3)
Run Code Online (Sandbox Code Playgroud)

单个data.frame看起来像这样:

         data_id    data_value
1        A          1
2        B          2
3        C          2
4        D          3
5        E          3
6        F          2
7        G          3
8        H          1
9        I          1
10       J          3
Run Code Online (Sandbox Code Playgroud)

我想要计算每个唯一值出现在data_value中的频率.我可以做这个:

for(i in 1:length(df.list)){
    daply(df.list[[i]], .(df.list[[i]]$data_value), nrow) -> freq
}
Run Code Online (Sandbox Code Playgroud)

这给了我频率计数(在这种情况下只是最后一个,对于df3):

1 2 3 
2 5 3 
Run Code Online (Sandbox Code Playgroud)

我的实际数据集要大得多,所以我不能在这里发布.然而,它具有完全相同的结构.问题是,当我尝试获取实际数据集的频率计数时,我收到以下错误消息:

Error in dim(out_array) <- out_dim : dims [product 0] do not match the length …
Run Code Online (Sandbox Code Playgroud)

r frequency plyr dataframe

1
推荐指数
1
解决办法
3万
查看次数

标签 统计

r ×8

dataframe ×4

row ×3

ggplot2 ×2

pasting ×2

3d ×1

colors ×1

frequency ×1

grep ×1

list ×1

names ×1

plot ×1

plyr ×1

rgl ×1

text ×1