小编Jul*_*rre的帖子

生成唯一的字母数字ID

我有一个数据框,我想添加一个包含不重复的字母数字值的列.

首先,我改编了一个我在博客上找到的功能.(https://ryouready.wordpress.com/2008/12/18/generate-random-string-name/)

idGenerator <- function(n, lengthId) {

  alphaNum <- c(0:9, letters, LETTERS)

  if (n > length(alphaNum)^lengthId) {
    return("Error! n > perms : Infinite loop")
  }

  idList <- rep(NULL, n)

  for (i in 1:n) {
    idList[i] <- paste(sample(alphaNum, 
                                    lengthId, replace = TRUE), collapse = "")
    while(idList[i] %in% idList[-i]) {
      idList[i] <- paste(sample(alphaNum, 
                                lengthId, replace = TRUE), collapse = "")
    }
  }

  return(idList)
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我的数据帧有大约250k行,所以n = 250k这个函数只是永远运行.我知道n = 250k,如果我增加id字符串的长度(lengthId)获得相同字符串的几率是不现实的,所以while循环是浪费资源,但我真的需要确保不会发生,我对控制结构意味着"肯定".

所以我发现了一种更有效的方法,而不是调用while并检查i循环中每个的所有向量,我检查最终向量中是否有重复:

idGenerator <- …
Run Code Online (Sandbox Code Playgroud)

r

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

如何将千位与空间分开

我想格式化数字,以便每千个应该用空格分隔.

我尝试过的:

library(magrittr)
addSpaceSep <- function(x) {
  x %>% 
    as.character %>% 
    strsplit(split = NULL) %>% 
    unlist %>% 
    rev %>% 
    split(ceiling(seq_along(.) / 3)) %>% 
    lapply(paste, collapse = "") %>% 
    paste(collapse = " ") %>% 
    strsplit(split = NULL) %>% 
    unlist %>% 
    rev %>% 
    paste(collapse = "")
}

> sapply(c(1, 12, 123, 1234, 12345, 123456, 123456, 1234567), addSpaceSep)
[1] "1"         "12"        "123"       "1 234"     "12 345"    "123 456"   "123 456"  
[8] "1 234 567"
> sapply(c(1, 10, 100, 1000, 10000, 100000, 1000000), addSpaceSep) …
Run Code Online (Sandbox Code Playgroud)

regex r

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

删除构面分组变量中没有数据的因素

我有以下数据:

data <- data.frame(x = letters[1:6], 
                   group = rep(letters[1:2], each = 3), 
                   y = 1:6)

  x group y
1 a     a 1
2 b     a 2
3 c     a 3
4 d     b 4
5 e     b 5
6 f     b 6
Run Code Online (Sandbox Code Playgroud)

我想用y ~ xggplot2 绘制并按组分成多个方面。

ggplot(data, aes(x, y)) + 
  geom_bar(stat = "identity") + 
  facet_grid(group ~ .)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

问题是(x; group)我的数据中不存在某些元组(例如 ) 没有数据x = a && group = b,但它们保留在两个方面的 x 轴中,因此我想删除它们,然后删除方面中的空白当各个组中缺少因素时。

我以为scales = "free_x" or …

r ggplot2

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

当html加载http时,无法显示"文件"协议url src的iframe

我试图在html页面上添加iframe,我意识到当我通过HTTP协议加载我的HTML文件时(例如在地址:localhost/file.html),只有带有"http://localhost.."URL的文件才会显示在iframe中.
网站网址或本地文件(使用访问"file:///C:/...")在iframe中不返回任何内容(甚至没有"未找到"或其他错误).
同样,当我使用file协议(然后是网址file:///C:/UwAmp/www/file.html)打开我的文件时,网站的网址仍然无法在iframe中工作(但是本地文件加载filehttp不是问题).

为什么在使用HTTP(S)协议加载的页面中忽略与"file:///"的链接?为什么我不能在我的iframe中显示网站?

感谢您的帮助.(抱歉我的英语,我尽力解释).

iframe http localhost

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

如何获取两个日期之间的所有月份?

我想生成两个日期之间所有月份的序列。

我可以用 seq.Date 来实现这一点:

start <- as.Date("2015-08-01")
end <- as.Date("2015-09-01")
seq <- seq.Date(start, end, by = "month")
[1] "2015-08-01" "2015-09-01"
format(seq, "%Y-%m")
[1] "2015-08" "2015-09"
Run Code Online (Sandbox Code Playgroud)

但如果两个日期之间相隔不到一个月,则会失败:

start <- as.Date("2015-08-14")
end <- as.Date("2015-09-03")
seq <- seq.Date(start, end, by = "month")
[1] "2015-08-14"
format(seq, "%Y-%m")
[1] "2015-08"
Run Code Online (Sandbox Code Playgroud)

我可以用 seq 解决几天的问题:

unique(format(seq.Date(start, end, by = "day"), "%Y-%m"))
[1] "2015-08" "2015-09"
Run Code Online (Sandbox Code Playgroud)

但有没有一种更简单的方法来做到这一点,我缺少什么?谢谢。

r

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

data.frame行列出命名元素

我有一个2列的混合类型,矢量和数据框列表.

> my.list
$a
[1] 1

$df1
  key value
1   b     2
2   c     3

$df2
  key value
1   d     4
2   e     5
Run Code Online (Sandbox Code Playgroud)

我想最后得到一个向量列表,每个数据帧行将成为一个列表元素,列值为value,列键为元素名称.

所以这个例子的结果是:

$a
[1] 1

$b
[1] 2

$c
[1] 3

$d
[1] 4

$e
[1] 5
Run Code Online (Sandbox Code Playgroud)

其实这就是我如何做到这一点:

my.list <- list(a = 1, 
                df1 = data.frame(key = c("b", "c"), value = 2:3), 
                df2 = data.frame(key = c("d", "e"), value = 4:5))

unlist(lapply(seq_along(my.list), function(i) {
  if (is.data.frame(my.list[[i]])) {
    with(my.list[[i]], as.list(setNames(value, key), all.names = TRUE))
  } else { …
Run Code Online (Sandbox Code Playgroud)

r

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

将值映射到不同变量的组中

我想创建一个函数来将值映射到组,以及不同的变量.

df <- data.frame(x = c("a", "a", "b", "c", "c", "d", "e"), 
                 y = c(1, 5, 5, 1, 6, 8, 3), 
                 z = runif(7), 
                 stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

例如,对于这些数据,对于变量x,我想将值"a","b"映射到"label1",将"c""d""e"映射到"label2",并且对于变量y map 1, 3成"code1",5,6,8成"code2".

groups <- list(x = list(label1 = c("a", "b"), label2 = c("c", "d", "e")), 
                  y = list(code1 = c(1, 3), code2 = c(5, 6, 8)))
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想要映射来自2个变量的值,但它可以是1,3,4 ......所以我不想为每个变量创建数据帧查找或逐个分配每个变量.这就是为什么我使用一个列表(我在函数参数中发现它更友好)并且不能使用$.+这是在函数内部使用,所以我不需要硬编码.

所以实际上我创建了这个函数:

f <- function(x, groups) {

  table <- reshape2::melt(groups)
  table <- split(table, table$L1)

  for (i in seq_along(table)) {
    x[names(table)[i]] <- table[[i]]$L2[match(x[,names(table)[i]], table[[i]]$value)]
  } …
Run Code Online (Sandbox Code Playgroud)

r

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

将 2 个不同长度列表的值粘贴在一起

我想将两个不同长度列表的值“粘贴”在一起

例如我有那些清单

x = [1, 2, 3, 4]
y = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

所以期望的输出是:

['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4', 'c1', 'c2', 'c3', 'c4']

我找到了一种方法来实现它:

li = []
for yy in y : 
  li += list(map(lambda xx : yy + str(xx), x))
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是 Python 的方式,或者它是否真的很好。

还有更好的选择吗?谢谢

python

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

标签 统计

r ×6

ggplot2 ×1

http ×1

iframe ×1

localhost ×1

python ×1

regex ×1