小编jsl*_*che的帖子

R - 基于嵌套列表的标题图

我有 2 个列表,每个列表中还有两个包含数据框的列表(换句话说,嵌套列表)。我想绘制每个数据框并根据主列表和嵌套列表的名称为其添加标题。

例如,假设我们有:

a=list(
  list(a=data.frame(x=rpois(5,1),y=rpois(5,1)),
       b=data.frame(x=rpois(5,1),y=rpois(5,1))),
  list(c=data.frame(x=rpois(5,1),y=rpois(5,1)),
       d=data.frame(x=rpois(5,1),y=rpois(5,1))))
Run Code Online (Sandbox Code Playgroud)

我们有主要列表的名称:

names(a)=c("alpha","bravo")
Run Code Online (Sandbox Code Playgroud)

在两个主要列表alpha和中bravo,我们还有两个列表charliedelta

for(i in 1:length(a)) {
  names(a[[i]])=c("charlie","delta") }
Run Code Online (Sandbox Code Playgroud)

我可以用来循环遍历每个列表并绘制数据框,但我无法让标题将每个数据框的主列表(和)和嵌套列表(和)lapply的名称组合起来。例如,在本例中,我想要四个图,分别称为:、、和。alphabravocharliedeltaalpha_charliealpha_deltabravo_charliebravo_delta

lapply(a,function(i) {
  lapply(names(i), function(j) { 
    ggplot()+
      geom_point(data=i[[j]],aes(x,y))+
      opts(title=paste(names(i),j,sep="_")) #Here is where I am struggling!
    } ) } )
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。谢谢你!

r list nested-lists

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

嵌套if else语句将标签附加到值

我有一列1:1000的数字.我想在每个数字的前面附加标签"s",以便每个单元格中的字符总数保持不变.例如,"1"将变为"s0001","15"将变为"s0015","620"将变为"s0620",并且"1000"将变为"s1000".

我试图使用嵌套if else语句来完成此操作,但我不断收到条件长度> 1且只使用第一个元素的错误.

这是一个示例数据集和我正在使用的代码:

df=data.frame(code=seq(1:1000))
df$code=
  if (df$code < 10) { df$code=paste("s000",df$code,sep="") } else
    if (100 > df$code & df$code >= 10) { df$code=paste("s00",df$code,sep=="") } else
      if (1000 > df$code & df$code >= 100) { df$code=paste("s0",df$code,sep="") } else
      { df$code=paste("s",df$code,sep="") }
Run Code Online (Sandbox Code Playgroud)

我怀疑有一种更简单的方法可以不使用它if else.有什么想法吗?

谢谢!


感谢Joran!如果x是非连续整数:

d=data.frame(x=sample(1:1000,500))
d$nc=nchar(d$x)
ddply(d,.(nc),transform,lab = paste("s",paste(rep("0",4-unique(nc)),collapse = ""),x,sep = ""))
Run Code Online (Sandbox Code Playgroud)

if-statement r

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

R - 从给定约束的2个向量生成所有组合

我想生成两个向量的所有组合,给定两个约束:第一个向量中永远不能超过3个字符,并且第二个向量中必须始终至少有一个字符.我还想改变组合中的最终字符数.

例如,这里有两个向量:

vec1=c("A","B","C","D")
vec2=c("W","X","Y","Z")
Run Code Online (Sandbox Code Playgroud)

说我想在组合中使用3个字符.可能的可接受的排列是:"A" "B" "X""A" "Y" "Z".不可接受的排列是:"A" "B" "C"因为至少有一个字符来自vec2.

现在说我想要组合中的5个字符.可能的可接受的排列是:"A" "C" "Z" "Y""A" "Y" "Z" "X".一个不可接受的排列将是:"A" "C" "D" "B" "X"因为有超过3个字符vec2.

我想我可以使用expand.grid生成所有组合,然后以某种方式子集,但必须有一个更简单的方法.提前致谢!

combinations r

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

R - 在数据帧的子集中查找所有唯一值

我有一个包含两列的数据框.第一列定义数据的子集.我想在第二列中找到仅出现在第一列中的一个子集中的所有值.

例如,来自:

df=data.frame(
  data_subsets=rep(LETTERS[1:2],each=5),
  data_values=c(1,2,3,4,5,2,3,4,6,7))

data_subsets data_values
      A           1
      A           2
      A           3
      A           4
      A           5
      B           2
      B           3
      B           4
      B           6
      B           7
Run Code Online (Sandbox Code Playgroud)

我想提取以下数据框.

data_subsets   data_values
    A              1
    A              5
    B              6
    B              7
Run Code Online (Sandbox Code Playgroud)

我一直在玩,duplicated但我似乎无法使它工作.任何帮助表示赞赏.有很多主题可以解决类似的问题,我希望我的搜索没有忽略答案!

编辑

我修改了@Matthew Lundberg的方法,即计算元素的数量并从数据框中提取.出于某种原因,他的方法不适合我的数据框架,所以我提出了这个,这不太优雅,但完成工作:

counts=rowSums(do.call("rbind",tapply(df$data_subsets,df$data_values,FUN=table)))
extract=names(counts)[counts==1]
df[match(extract,df$data_values),]
Run Code Online (Sandbox Code Playgroud)

r unique duplicates

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

标签 统计

r ×4

combinations ×1

duplicates ×1

if-statement ×1

list ×1

nested-lists ×1

unique ×1