首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在R中通过dataframe中的列表运行for循环

如何在R中通过dataframe中的列表运行for循环
EN

Stack Overflow用户
提问于 2018-09-06 15:43:09
回答 2查看 127关注 0票数 1

我有一个dataframe,它包含一个dataframe列的每个单元格中的列表。例如,下面是一个测试数据帧。

代码语言:javascript
运行
AI代码解释
复制
df <- data.frame(id=1:2)
df$month <-  list(c("1","2","3"), c("3","5","7"))
df

我想计算一行中每个列表中的平均差异,并将结果存储为一个新变量,比方说MeanDiff。例如(1,2,3)的平均差为1(2-1)+(3-2)/2))。

我的外部for循环应该是

代码语言:javascript
运行
AI代码解释
复制
for (i in 1: nrow(df)){
}

但是,我不知道如何遍历我必须在其上运行函数的行中列表的每个元素,如下所示

代码语言:javascript
运行
AI代码解释
复制
Diff = []
Diff[i] = i+1 - i
MeanDiff[i] = Diff/length(Diff)

任何帮助都将不胜感激!此外,这是我的第一篇StackOverflow帖子,我也很感激任何关于提问的元反馈!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-06 15:54:29

这里有两个解决方案:

代码语言:javascript
运行
AI代码解释
复制
df$diff <- lapply(df$month, function(a) sum(diff(as.numeric(a)))/2)
df
#   id   month diff
# 1  1 1, 2, 3    1
# 2  2 3, 5, 7    2

这样做的一个问题是,尽管它看起来像一个普通的列,但它并不完全是您所期望的:

代码语言:javascript
运行
AI代码解释
复制
df$diff[1]
# [[1]]
# [1] 1

这是单个元素的list,其中可能需要一个标量(在R的情况下,长度为1的向量)。另一种选择(如JilberUrbina建议的)是在您希望结果长度为1的情况下使用sapply

代码语言:javascript
运行
AI代码解释
复制
df$diff2 <- sapply(df$month, function(a) sum(diff(as.numeric(a)))/2)
df$diff2[1]
# [1] 1

如果您使用的是tidyverse工具集(许多人都推荐),请尝试以下方法:

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
library(purrr)

df %>%
  mutate(
    diff = map(month, ~ sum(diff(as.numeric(.)))/2)
  )
#   id   month diff
# 1  1 1, 2, 3    1
# 2  2 3, 5, 7    2

如果您将其存储在tidyverse的默认tibble中,它将如下所示:

代码语言:javascript
运行
AI代码解释
复制
tbl_df(df) %>%
  mutate(
    diff = map(month, ~ sum(diff(as.numeric(.)))/2)
  )
# # A tibble: 2 x 3
#      id month     diff     
#   <int> <list>    <list>   
# 1     1 <chr [3]> <dbl [1]>
# 2     2 <chr [3]> <dbl [1]>

虽然这实际上是一回事。如果您计划在一个列中重复存储列表或其他复杂的内容(例如,lm模型、predict离子),那么这可能非常方便,而且可能最终是直观的。

票数 1
EN

Stack Overflow用户

发布于 2018-09-06 15:48:57

您可以使用lapply

代码语言:javascript
运行
AI代码解释
复制
> lapply(df$month, function(x) 
    {tmp <- as.numeric(x)  # this converts character to numeric
    tmp <- sum(diff(tmp))/(length(tmp)-1) # performs calculations
    tmp})  # returns output
[[1]]
[1] 1

[[2]]
[1] 2

如果希望输出是向量而不是列表,则为sapply

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52207805

复制
相关文章
推荐17-Laravel 中使用 JWT 认证的 Restful API
在此文章中,我们将学习如何使用 JWT 身份验证在 Laravel 中构建 restful API 。JWT 代表 JSON Web Tokens 。我们还将使用 API 为用户产品创建功能齐全的 CRUD 应用。
猿哥
2019/09/24
11.2K0
推荐17-Laravel 中使用 JWT 认证的 Restful API
laravel dingo Api结合jwt 处理token校验
此命令会在 config 目录下生成一个 api.php 配置文件,你可以在此进行自定义配置。
joshua317
2021/04/20
5.7K0
laravel dingo Api结合jwt 处理token校验
laravel dingo/api添加jwt-auth认证
前面我们学了laravel dingo/api创建简单的api,这样api是开放给所有人的,如何查看和限制api的调用呢?可以用jwt-auth来验证,JSON Web Token Authentication
ytkah
2018/08/01
1.2K0
laravel dingo/api添加jwt-auth认证
JSON Web Token(JWT)教程:一个基于Laravel和AngularJS的例子
这是一篇介绍JSON Web Token(JWT)的文章,虽然可能用到的例子和Laravel和AngularJS有关,但知道了原理便能写出适用于自己的。同时,由于目前个人用的后台一直是java,前端也没用过AngularJS,vue也是最近才开始学,所以Laravel和AngularJS部分 并不十分了解,若有错误,欢迎及时提出。
WindCoder
2018/09/20
30.9K0
JSON Web Token(JWT)教程:一个基于Laravel和AngularJS的例子
laravel jwt 无感刷新token
b.刷新时间,刷新时间指的是在这个时间内可以凭旧 token 换取一个新 token。例如 token 有效时间为 60 分钟,刷新时间为 20160 分钟,在 60 分钟内可以通过这个 token 获取新 token,但是超过 60 分钟是不可以的,然后你可以一直循环获取,直到总时间超过 20160 分钟,不能再获取。 这里要强调的是,是否在刷新期可以一直用旧的token获取新的token,这个是由blacklist_enabled这个配置决定的,这个是指是否开启黑名单,默认是开启的,即刷新后,旧token立马加入黑名单,不可在用。
joshua317
2021/04/22
2.9K0
laravel 5.4 + dingo api + jwt 代替 Passport
新装一个LV composer create-project --prefer-dist laravel/laravel myApiProject 安装dingo api 在composer.json
guanguans
2018/05/09
1.4K0
Laravel 使用 Json Web Token(JWT)
首先,您需要在User model上实现Tymon\JWTAuth\Contracts\JWTSubject合同,这要求您实现2种方法getJWTIdentifier()和getJWTCustomClaims()
崔哥
2023/04/03
9640
Laravel使用 Jwt-auth 实现多用户接口认证
首先创建数据库和表(admins),在 routes/api.php 中,写上如下路由并创建对应控制器和方法。
用户10002156
2023/08/07
6670
Laravel使用 Jwt-auth 实现多用户接口认证
关于Laravel5.5增加的新功能——包自动发现
在Laravel5.5中,增加了一个新功能,就是支持包自动发现,这个有什么用呢,结合JWT的文档来说明会更好一些。
咪啪咪啪
2019/11/15
6760
uni-app+php+workman实现简单聊天功能之API开发
在之前的文章【laravel中Websocket基本使用】中我们已经初步搭建了websocket服务,现在我们只需要稍微修改一下Events即可 当连接成功时我们将客户端id发送的客户端
切图仔
2022/09/08
1.8K3
laravel5.6 反解token获取用户信息
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129668.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
6680
Laravel JWT 通过token获取用户信息
官方文档 1.控制器 use Tymon\JWTAuth\Exceptions\TokenExpiredException; use Tymon\JWTAuth\Facades\JWTAuth; public function getAuthenticatedUser() { try { if (! $user = JWTAuth::parseToken()->authenticate()) { return response()->json(['use
切图仔
2022/09/14
2.6K0
Laravel JWT 通过token获取用户信息
Laravel Api实现JWT Token认证
在开发Api时,处理客户端请求之前,需要对用户进行身份认证,Laravel框架默认为我们提供了一套用户认证体系,在进行web开发时,几乎不用添加修改任何代码,可直接使用,但在进行api开发时,需要我们自己去实现,并且Laravel框架默认提供的身份认证不是jwt的,需要在数据库中增加api_token字段,记录用户认证token并进行身份校验,如果需要使用jwt,无需添加字段,需要借助三方库来实现。
Petrochor
2022/06/07
7700
Laravel Api实现JWT Token认证
lumen安装Horizon
昨天领导告诉我,要安装Horizon。但是我们使用的是lumen,官方的Horizon并不支持lumen。所以又去找第三方,结果发现已经八个月没有更新了。无奈尝试自己维护。发现一堆坑。根本填不完。今天早上想着去packagist去淘淘。还真让我发现了一个正在维护的: horizon-lumen。
魔王卷子
2019/05/31
1.9K8
laravel 中配置DingoApi 和JWT
创建 基础控制器、用户认证控制器,对应路由文件中的命名空间 App\Http\Controllers\Api\v1
友儿
2023/10/21
3250
laravel 中配置DingoApi 和JWT
点击加载更多

相似问题

Tymon\JWTAuth::toUser错误:需要令牌

30

找不到Tymon JWTAuth类

32

找不到类'Tymon\JWTAuth\Providers\LaravelServiceProvider‘

22

JWT-令牌:未找到类'Tymon\JWTAuth\Providers\JWTAuthServiceProvider‘

23

参数1传递给Tymon\JWTAuth\JWTGuard::login()必须实现接口Tymon\JWTAuth\Contracts\JWTSubject

12
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档